<?xml version="1.0" encoding="UTF-8" ?>
<rss version="2.0" xmlns:discourse="http://www.discourse.org/" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>Khronos Forums - Latest topics</title>
    <link>https://community.khronos.org/latest</link>
    <description>Latest topics</description>
    
      <lastBuildDate>Sun, 07 Jun 2026 03:53:45 +0000</lastBuildDate>
      <atom:link href="https://community.khronos.org/latest.rss" rel="self" type="application/rss+xml" />
        <item>
          <title>Accessing array using number index causes strange crash in my HLSL shader</title>
          <dc:creator><![CDATA[Ligh7ninG]]></dc:creator>
          <category>Vulkan</category>
          <description><![CDATA[
            <p>Hi all,</p>
<p>So I have been implementing my toy Vulkan renderer for a while now, but recently ran into a really strange bug</p>
<p>In one of my fragment shader (using HLSL, if that matters), if I access some data with an explicit number index (i.e. 0), then my program crashes on startup:<br>
<code>printf("L %v3f", normalize(-lightUBO.dirLights[0].direction));</code></p>
<p>However, if I access it inside a for loop like this, then it’s fine:<br>
<code>for (uint j = 0; j &lt; lightUBO.dirLightNum; j++)</code><br>
<code>     printf(“L %v3f”, normalize(-lightUBO.dirLights[j].direction));</code><br>
(using <code>printf</code> only for illustration here, the actual light direction is used to calculate bias for shadow PCF)</p>
<p>I can confirm that:</p>
<ul>
<li><code>dirLightNum</code> is exactly 1 (verified on the CPU side, and on GPU side with RenderDoc and debug printf)</li>
<li><code>lightUBO.dirLights[j].direction (j = 0)</code> holds the correct data (verified on the CPU side, and on GPU side with RenderDoc and debug printf)</li>
<li>After countless tests on the shader side, the culprit can only be this line of code</li>
</ul>
<p>I have tried:</p>
<ul>
<li>Hardcoding the light direction on shader side, works fine</li>
<li>(Shown above) Accessing the data in a for loop, works fine</li>
<li>Integrating Nsight Aftermath, no minidump generated</li>
<li>Integrating the shader printf feature, the program crashes during drawing so no output</li>
<li>Changing things around in other parts of my shader code, no effect</li>
</ul>
<p>Other relevant info:</p>
<ul>
<li>The VS debugger throws an exception at the first drawIndexed call of the first frame (so first invocation of the fragment shader). Message is <code>Exception thrown at 0x00007FFC5089522D (nvoglv64.dll) in utah.exe: 0xC0000005: Access violation reading location 0xFFFFFFFFFFFFFFFF.</code></li>
<li>Using Nsight Graphics to run my program somehow will not trigger the crash. But using VS/.exe/RenderDoc will</li>
<li>My project: <a href="https://github.com/Ligh7ninG1118/utah" rel="noopener nofollow ugc">GitHub Repo</a> (Pretty messy code I know)<br>
. The shader is <code>/shaders/blinn_phong_frag.hlsl</code>. LightUBO definition is in <code>/src/Render/GPUTypes.h</code>.</li>
</ul>
<p>Even though I know the final version of my shader will still use a for loop, but this bug is just too strange for me to wrap my head around. I have spent the past two days trying to figure this one out, and I would appreciate any insight or pointers anyone can share!</p>
            <p><small>3 posts - 2 participants</small></p>
            <p><a href="https://community.khronos.org/t/accessing-array-using-number-index-causes-strange-crash-in-my-hlsl-shader/112567">Read full topic</a></p>
          ]]></description>
          <link>https://community.khronos.org/t/accessing-array-using-number-index-causes-strange-crash-in-my-hlsl-shader/112567</link>
          <pubDate>Sun, 07 Jun 2026 03:53:45 +0000</pubDate>
          <discourse:topicPinned>No</discourse:topicPinned>
          <discourse:topicClosed>No</discourse:topicClosed>
          <discourse:topicArchived>No</discourse:topicArchived>
          <guid isPermaLink="false">community.khronos.org-topic-112567</guid>
          <source url="https://community.khronos.org/t/accessing-array-using-number-index-causes-strange-crash-in-my-hlsl-shader/112567.rss">Accessing array using number index causes strange crash in my HLSL shader</source>
        </item>
        <item>
          <title>Algorithms behind `workGroupFunctions`</title>
          <dc:creator><![CDATA[kartoschatatoscha]]></dc:creator>
          <category>OpenCL</category>
          <description><![CDATA[
            <p>From what it seems the usage of <code>workGroupFunctions</code> in OpenCL kernels, e.g. <code>work_group_scan_exclusive_add</code> pushes the implementation of the underlying algorithm onto the device (if it does indeed support <code>__opencl_c_work_group_collective_functions</code>).</p>
<p>Could someone please verify whether my understanding is correct? Thank you</p>
            <p><small>1 post - 1 participant</small></p>
            <p><a href="https://community.khronos.org/t/algorithms-behind-workgroupfunctions/112565">Read full topic</a></p>
          ]]></description>
          <link>https://community.khronos.org/t/algorithms-behind-workgroupfunctions/112565</link>
          <pubDate>Sat, 06 Jun 2026 19:58:02 +0000</pubDate>
          <discourse:topicPinned>No</discourse:topicPinned>
          <discourse:topicClosed>No</discourse:topicClosed>
          <discourse:topicArchived>No</discourse:topicArchived>
          <guid isPermaLink="false">community.khronos.org-topic-112565</guid>
          <source url="https://community.khronos.org/t/algorithms-behind-workgroupfunctions/112565.rss">Algorithms behind `workGroupFunctions`</source>
        </item>
        <item>
          <title>Whether modern GPUs support full source-level debugging of OpenCL kernels, what tools provide it, and how GPU debuggers handle GPU-specific execution concepts such as wavefronts, warps, and work-items.</title>
          <dc:creator><![CDATA[AshayaRamteke98]]></dc:creator>
          <category>OpenCL</category>
          <description><![CDATA[
            <p>I am trying to understand the current state of source-level debugging for OpenCL kernels running on GPUs.</p>
<p>For CPU OpenCL implementations, source-level debugging is generally possible using standard debuggers. However, I am specifically interested in debugging OpenCL kernels executing on actual GPU hardware.</p>
<p>My questions are:</p>
<ol>
<li>
<p>Is there currently a full-fledged debugger that supports source-level debugging of OpenCL kernels on GPUs?</p>
</li>
<li>
<p>Can such a debugger:</p>
<ul>
<li>
<p>Set breakpoints inside kernels?</p>
</li>
<li>
<p>Single-step kernel instructions?</p>
</li>
<li>
<p>Inspect kernel variables (private, local, and global memory)?</p>
</li>
<li>
<p>Inspect work-item and work-group state?</p>
</li>
<li>
<p>Switch between individual work-items and inspect each work-item’s execution state independently?</p>
</li>
<li>
<p>View call stacks and source line mappings?</p>
</li>
</ul>
</li>
<li>
<p>Are there vendor-specific solutions (AMD, Intel, NVIDIA) that provide this functionality?</p>
</li>
<li>
<p>How is this typically implemented under the hood, given that GPU execution is based on wavefronts/warps rather than independently scheduled threads?</p>
</li>
<li>
<p>If true source-level debugging is not generally available, what are the main technical limitations that make it difficult?</p>
</li>
</ol>
<p>I would also appreciate references to any open-source or commercial tools that support OpenCL kernel debugging, as well as any papers, documentation, or presentations describing the current state of GPU debugging.</p>
<p>My goal is to understand whether OpenCL kernel debugging on GPUs has reached a level comparable to CPU debugging with GDB/LLDB, or whether developers still primarily rely on printf-style debugging, simulators, and profiling tools.</p>
<p>For context, I am particularly interested in AMD ROCm, Intel GPU runtimes, PoCL, and other modern OpenCL implementations.</p>
            <p><small>2 posts - 2 participants</small></p>
            <p><a href="https://community.khronos.org/t/whether-modern-gpus-support-full-source-level-debugging-of-opencl-kernels-what-tools-provide-it-and-how-gpu-debuggers-handle-gpu-specific-execution-concepts-such-as-wavefronts-warps-and-work-items/112559">Read full topic</a></p>
          ]]></description>
          <link>https://community.khronos.org/t/whether-modern-gpus-support-full-source-level-debugging-of-opencl-kernels-what-tools-provide-it-and-how-gpu-debuggers-handle-gpu-specific-execution-concepts-such-as-wavefronts-warps-and-work-items/112559</link>
          <pubDate>Tue, 02 Jun 2026 17:40:00 +0000</pubDate>
          <discourse:topicPinned>No</discourse:topicPinned>
          <discourse:topicClosed>No</discourse:topicClosed>
          <discourse:topicArchived>No</discourse:topicArchived>
          <guid isPermaLink="false">community.khronos.org-topic-112559</guid>
          <source url="https://community.khronos.org/t/whether-modern-gpus-support-full-source-level-debugging-of-opencl-kernels-what-tools-provide-it-and-how-gpu-debuggers-handle-gpu-specific-execution-concepts-such-as-wavefronts-warps-and-work-items/112559.rss">Whether modern GPUs support full source-level debugging of OpenCL kernels, what tools provide it, and how GPU debuggers handle GPU-specific execution concepts such as wavefronts, warps, and work-items.</source>
        </item>
        <item>
          <title>glTF format questions - byte order and primitive index/attribute relationship</title>
          <dc:creator><![CDATA[macheeto]]></dc:creator>
          <category>glTF</category>
          <description><![CDATA[
            <p>Hello,</p>
<p>I have two questions about glTF format:</p>
<ol>
<li>
<p>What is the byte order when reading short/int/float values from the buffer? I could not find any info on this online.</p>
</li>
<li>
<p>What is the relationship between indices (in mesh/primitive) and attributes? If I have two attributes, say POSITION and NORMAL, how many indexes per vertex will there be, and what will be the order of those?</p>
</li>
</ol>
<p>Thanks!</p>
            <p><small>6 posts - 2 participants</small></p>
            <p><a href="https://community.khronos.org/t/gltf-format-questions-byte-order-and-primitive-index-attribute-relationship/112558">Read full topic</a></p>
          ]]></description>
          <link>https://community.khronos.org/t/gltf-format-questions-byte-order-and-primitive-index-attribute-relationship/112558</link>
          <pubDate>Tue, 02 Jun 2026 11:32:12 +0000</pubDate>
          <discourse:topicPinned>No</discourse:topicPinned>
          <discourse:topicClosed>No</discourse:topicClosed>
          <discourse:topicArchived>No</discourse:topicArchived>
          <guid isPermaLink="false">community.khronos.org-topic-112558</guid>
          <source url="https://community.khronos.org/t/gltf-format-questions-byte-order-and-primitive-index-attribute-relationship/112558.rss">glTF format questions - byte order and primitive index/attribute relationship</source>
        </item>
        <item>
          <title>Is it possible to render HDR in OpenGL 4.1 on macOS or iPadOS</title>
          <dc:creator><![CDATA[markc]]></dc:creator>
          <category>OpenGL</category>
          <description><![CDATA[
            <p>I am trying to get my macOS app to render in HDR with an HDR texture. It is rendering but not in HDR. The app uses SDL3. I set {RED,GREEN,BLUE}_SIZE to 16 before creating the SDL window and the GL context. The app is rendering a textured quad using a GL_RGBA16F format texture. Is there something else I need to do? Is it even possible?</p>
            <p><small>2 posts - 2 participants</small></p>
            <p><a href="https://community.khronos.org/t/is-it-possible-to-render-hdr-in-opengl-4-1-on-macos-or-ipados/112551">Read full topic</a></p>
          ]]></description>
          <link>https://community.khronos.org/t/is-it-possible-to-render-hdr-in-opengl-4-1-on-macos-or-ipados/112551</link>
          <pubDate>Thu, 28 May 2026 08:39:01 +0000</pubDate>
          <discourse:topicPinned>No</discourse:topicPinned>
          <discourse:topicClosed>No</discourse:topicClosed>
          <discourse:topicArchived>No</discourse:topicArchived>
          <guid isPermaLink="false">community.khronos.org-topic-112551</guid>
          <source url="https://community.khronos.org/t/is-it-possible-to-render-hdr-in-opengl-4-1-on-macos-or-ipados/112551.rss">Is it possible to render HDR in OpenGL 4.1 on macOS or iPadOS</source>
        </item>
        <item>
          <title>How to render HDR with Vulkan on iPadOS</title>
          <dc:creator><![CDATA[markc]]></dc:creator>
          <category>Vulkan</category>
          <description><![CDATA[
            <p>My Vulkan app, which uses MoltenVK for now, is happily rendering in HDR on macOS (Sequoia) but not on iPadOS (M4 iPadPro, iPadOS 26.5). Is there something additional that I have to set to enable HDR rendering for the iPad app?</p>
<p>The app sets the surface format to VK_FORMAT_R16G16B16A16_SFLOAT and enables and uses the VK_EXT_swapchain_color_space extension.</p>
            <p><small>2 posts - 2 participants</small></p>
            <p><a href="https://community.khronos.org/t/how-to-render-hdr-with-vulkan-on-ipados/112550">Read full topic</a></p>
          ]]></description>
          <link>https://community.khronos.org/t/how-to-render-hdr-with-vulkan-on-ipados/112550</link>
          <pubDate>Thu, 28 May 2026 08:28:44 +0000</pubDate>
          <discourse:topicPinned>No</discourse:topicPinned>
          <discourse:topicClosed>No</discourse:topicClosed>
          <discourse:topicArchived>No</discourse:topicArchived>
          <guid isPermaLink="false">community.khronos.org-topic-112550</guid>
          <source url="https://community.khronos.org/t/how-to-render-hdr-with-vulkan-on-ipados/112550.rss">How to render HDR with Vulkan on iPadOS</source>
        </item>
        <item>
          <title>Error in loading fragment shader from frag.glsl</title>
          <dc:creator><![CDATA[ArunSharma-2]]></dc:creator>
          <category>OpenGL: Basic Coding</category>
          <description><![CDATA[
            <p>this is my fragment shader from shader/frag.glsl</p>
<p><span class="hashtag-raw">#version</span> 330 core<br>
out vec4 aColor;<br>
void main(){<br>
aColor = vec4(1.0, 0.0, 0.0, 1.0);<br>
}</p>
<p>there are no errors in program compiling but on running the “app.exe” i am getting this error</p>
<p>ERROR::SHADER::COMPILATION_FAILED<br>
ERROR: 0:1: ‘’ : illegal character (0x1)<br>
ERROR: 0:1: ‘’ : illegal non-ASCII character (0xb6)<br>
ERROR: 0:1: ‘’ : illegal non-ASCII character (0xc4)<br>
ERROR: 0:1: ‘’ : illegal character (0x2)<br>
WARNING: 0:1: ‘’ :  <span class="hashtag-raw">#version</span> directive missing<br>
ERROR: 0:1: ‘PZ’ : syntax error syntax error</p>
<p>This is my loadShader program:</p>
<p>std::string loadShader(const std::string&amp; path){</p>
<pre><code>std::string result;

std::string line;

std::ifstream myFile(path.c_str());

if (myFile.is_open()) {

    while (std::getline(myFile, line)) {

        result += line + "\\n";

    }

    myFile.close();

} else {

    std::cerr &lt;&lt; "Could not read file " &lt;&lt; path &lt;&lt; ". File does not exist.\\n";

}

return result;
</code></pre>
<p>};</p>
<p>this is working fine for vert.glsl .</p>
<p>i also tried to load vert.glsl from file and fragemt shader using</p>
<p>“<span class="hashtag-raw">#version</span> 330 core\n”</p>
<pre><code>    "out vec4 aColor;\\n"

    "void main()\\n"

    "{\\n"

    "    aColor = vec4(1.0f, 0.0, 0.0, 1.0);\\n"

    "}\\0";
</code></pre>
<p>this combo is working file .</p>
<p>help me where i am wrong in loading fragment shader from frag.glsl .</p>
            <p><small>4 posts - 4 participants</small></p>
            <p><a href="https://community.khronos.org/t/error-in-loading-fragment-shader-from-frag-glsl/112549">Read full topic</a></p>
          ]]></description>
          <link>https://community.khronos.org/t/error-in-loading-fragment-shader-from-frag-glsl/112549</link>
          <pubDate>Thu, 28 May 2026 07:55:58 +0000</pubDate>
          <discourse:topicPinned>No</discourse:topicPinned>
          <discourse:topicClosed>No</discourse:topicClosed>
          <discourse:topicArchived>No</discourse:topicArchived>
          <guid isPermaLink="false">community.khronos.org-topic-112549</guid>
          <source url="https://community.khronos.org/t/error-in-loading-fragment-shader-from-frag-glsl/112549.rss">Error in loading fragment shader from frag.glsl</source>
        </item>
        <item>
          <title>[Noob] How should I be structuring my descriptors/sets?</title>
          <dc:creator><![CDATA[badatvulkan]]></dc:creator>
          <category>Vulkan</category>
          <description><![CDATA[
            <p>Apologies ahead of time if this is way too long. I’m learning Vulkan through vkguide currently, and I stopped at around the start of chapter 4 to try and figure out how to do image samplers myself. So far I’ve been able to get by on reading documentation and examples alongside debugging with validation layer error messages. But currently I’m stuck on how to handle managing descriptors/rendering multiple objects. Right now I’m drawing a hardcoded rectangular mesh and an imported GLTF model to the screen, with both using the same vert/frag shaders. Each “frame” gets 2 descriptor sets.</p>
<p>Set 0 is a uniform buffer that stores a mat4 that I use to translate the output vertex</p>
<p>Set 1 is the texture sampler.</p>
<p>Set 1 gets updated once before the rendering begins, but set 0 is where I’m kind of stuck. My goal was to update set 0 after drawing the rectangle so that the model is the only thing shifting left to right.</p>
<p>So during the render function I tried doing</p>
<pre data-code-wrap="cpp"><code class="lang-cpp">vkCmdBindPipeline();
glm::mat4 shift;
VkDescriptorBufferinfo bufferInfo{};
VkWriteDescriptorSet uboWrite = {};
uboWrite.dstSet = currentFrameObject.PipelineDescriptors[0];
vkUpdateDescriptorSets(device, 1, &amp;uboWrite, 0, nullptr);

vkCmdBindDescriptorSets(currentFrameObject.PipelineDescriptors);

vkCmdDrawIndexed(); // Draw the rectangle

// update the mat4 shift to some other value
vkUpdateDescriptorSets(device, 1, &amp;uboWrite, 0, nullptr);

vkCmdDrawIndexed(); // Draw the imported model
</code></pre>
<p>Validation layers then reported that this invalidates the command buffer since the descriptors weren’t created with the ability to UPDATE_AFTER_BIND. I assume this is a race condition problem caused by modifying values that the pipeline hasn’t fully processed yet. So I’m kind of stuck on how I should be organizing these descriptors in order to render multiple different objects possibly with different textures. Should I be giving each rendered object its own descriptor sets instead and bind them between draw calls? Or something like making one big descriptor that stores all this data for all drawn objects and update it once before drawing?</p>
            <p><small>2 posts - 1 participant</small></p>
            <p><a href="https://community.khronos.org/t/noob-how-should-i-be-structuring-my-descriptors-sets/112547">Read full topic</a></p>
          ]]></description>
          <link>https://community.khronos.org/t/noob-how-should-i-be-structuring-my-descriptors-sets/112547</link>
          <pubDate>Wed, 27 May 2026 02:50:53 +0000</pubDate>
          <discourse:topicPinned>No</discourse:topicPinned>
          <discourse:topicClosed>No</discourse:topicClosed>
          <discourse:topicArchived>No</discourse:topicArchived>
          <guid isPermaLink="false">community.khronos.org-topic-112547</guid>
          <source url="https://community.khronos.org/t/noob-how-should-i-be-structuring-my-descriptors-sets/112547.rss">[Noob] How should I be structuring my descriptors/sets?</source>
        </item>
        <item>
          <title>Is it able to Baching DrawCall of 2 overlapped rects?</title>
          <dc:creator><![CDATA[gpu22]]></dc:creator>
          <category>Vulkan</category>
          <description><![CDATA[
            <p>is it able to Baching DrawCall of 2 overlapped rects?</p>
            <p><small>3 posts - 2 participants</small></p>
            <p><a href="https://community.khronos.org/t/is-it-able-to-baching-drawcall-of-2-overlapped-rects/112546">Read full topic</a></p>
          ]]></description>
          <link>https://community.khronos.org/t/is-it-able-to-baching-drawcall-of-2-overlapped-rects/112546</link>
          <pubDate>Mon, 25 May 2026 01:26:41 +0000</pubDate>
          <discourse:topicPinned>No</discourse:topicPinned>
          <discourse:topicClosed>No</discourse:topicClosed>
          <discourse:topicArchived>No</discourse:topicArchived>
          <guid isPermaLink="false">community.khronos.org-topic-112546</guid>
          <source url="https://community.khronos.org/t/is-it-able-to-baching-drawcall-of-2-overlapped-rects/112546.rss">Is it able to Baching DrawCall of 2 overlapped rects?</source>
        </item>
        <item>
          <title>Extension and Feature are very confusing</title>
          <dc:creator><![CDATA[Kyoungmun]]></dc:creator>
          <category>Vulkan</category>
          <description><![CDATA[
            <p>Features are very confusing in vulkan</p>
<p>I guess a device extension has many features inside</p>
<p>and VkPhysicalDeviceFeatures, VkPhysicalDeviceVulkan11Features, VkPhysicalDeviceVulkan12Features, VkPhysicalDeviceVulkan13Features, VkPhysicalDeviceVulkan14Features are main feature variables given by Vulkan</p>
<p>however, when writing vkdevicecreateinfo,</p>
<p>there is pNext member</p>
<p>according to vulkan spec documents</p>
<p>there are so many struct which can be connected to this pNext</p>
<p>such as</p>
<p>VkDeviceDeviceMemoryReportCreateInfoEXT</p>
<p>VkDeviceDiagnosticsConfigCreateInfoNV</p>
<p>VkDeviceGroupDeviceCreateInfo</p>
<p>VkPhysicalDeviceBufferDeviceAddressFeatures</p>
<p>VkPhysicalDeviceDeviceAddressCommandsFeaturesKHR</p>
<p>VkPhysicalDeviceDeviceMemoryReportFeaturesEXT etc …</p>
<p>These are also features given by Vulkan</p>
<p>Then why does Khronos not give precise definitions about Vulkan features ?</p>
<p>What are those so many feature structs ?</p>
<p>What are the rules to find which feature structs are needed for my vulkan programming ?</p>
<p>How do I know that?</p>
<p>Please help me with this issue</p>
<p>Thank you</p>
            <p><small>7 posts - 2 participants</small></p>
            <p><a href="https://community.khronos.org/t/extension-and-feature-are-very-confusing/112545">Read full topic</a></p>
          ]]></description>
          <link>https://community.khronos.org/t/extension-and-feature-are-very-confusing/112545</link>
          <pubDate>Fri, 22 May 2026 04:26:11 +0000</pubDate>
          <discourse:topicPinned>No</discourse:topicPinned>
          <discourse:topicClosed>No</discourse:topicClosed>
          <discourse:topicArchived>No</discourse:topicArchived>
          <guid isPermaLink="false">community.khronos.org-topic-112545</guid>
          <source url="https://community.khronos.org/t/extension-and-feature-are-very-confusing/112545.rss">Extension and Feature are very confusing</source>
        </item>
        <item>
          <title>Tile Based Rendering Best Practices</title>
          <dc:creator><![CDATA[JeffP]]></dc:creator>
          <category>Vulkan</category>
          <description><![CDATA[
            <p>Are you optimizing Vulkan applications for mobile or tile-based GPUs? The Vulkan Guide has a dedicated section on Tile Based Rendering (TBR) best practices worth bookmarking.</p>
<p>Unlike traditional immediate-mode GPUs, tile-based architectures process the framebuffer in small screen regions, keeping work on fast on-chip memory before writing results to main system memory. For Vulkan developers, this means memory bandwidth is often the dominant performance factor.</p>
<p>Key takeaways from the guide:</p>
<p>Use load/store ops intentionally. Render pass attachment configuration is your primary tool for controlling bandwidth. Setting the right loadOp and storeOp values tells the driver whether to clear, load, or discard data, directly impacting whether data has to travel off-chip.</p>
<p>Keep depth and stencil transient. If depth and stencil buffers are not needed after a render pass, mark them with LOAD_OP_CLEAR and STORE_OP_DONT_CARE. This allows the driver to keep them entirely on-chip and avoid the cost of writing them back to external memory.</p>
<p>Favor compact pixel formats. On-chip tile memory is fixed in size. Smaller bit-depth formats allow the hardware to fit more data per tile, reducing spills to external memory and improving efficiency.</p>
<p>Optimize for the binning pass. Tilers process geometry twice: once to bin triangles into tiles, then again to shade pixels. Separating vertex positions from other attributes like UVs and normals lets the GPU read only what it needs during binning, cutting unnecessary bandwidth.</p>
<p>Provide clear intent to the driver. Because Vulkan abstracts hardware details like tile size, the best way to optimize is to use correct render pass configurations and memory flags so the driver can make informed decisions on your behalf.</p>
<p>The full guide covers these topics in depth, including guidance on MSAA, transient attachments, and dynamic rendering:</p><aside class="onebox allowlistedgeneric" data-onebox-src="https://docs.vulkan.org/guide/latest/tile_based_rendering_best_practices.html">
  <header class="source">
      <img src="https://community.khronos.org/uploads/default/original/2X/f/f04b9e1f885c11b161a0cb82723b5a21c43b58cb.png" class="site-icon" alt="" data-dominant-color="A41E22" width="32" height="32">

      <a href="https://docs.vulkan.org/guide/latest/tile_based_rendering_best_practices.html" target="_blank" rel="noopener">docs.vulkan.org</a>
  </header>

  <article class="onebox-body">
    

<h3><a href="https://docs.vulkan.org/guide/latest/tile_based_rendering_best_practices.html" target="_blank" rel="noopener">Tile Based Rendering (TBR) Best Practices :: Vulkan Documentation Project</a></h3>



  </article>

  <div class="onebox-metadata">
    
    
  </div>

  <div style="clear: both"></div>
</aside>

            <p><small>1 post - 1 participant</small></p>
            <p><a href="https://community.khronos.org/t/tile-based-rendering-best-practices/112538">Read full topic</a></p>
          ]]></description>
          <link>https://community.khronos.org/t/tile-based-rendering-best-practices/112538</link>
          <pubDate>Tue, 12 May 2026 14:40:00 +0000</pubDate>
          <discourse:topicPinned>No</discourse:topicPinned>
          <discourse:topicClosed>No</discourse:topicClosed>
          <discourse:topicArchived>No</discourse:topicArchived>
          <guid isPermaLink="false">community.khronos.org-topic-112538</guid>
          <source url="https://community.khronos.org/t/tile-based-rendering-best-practices/112538.rss">Tile Based Rendering Best Practices</source>
        </item>
        <item>
          <title>How to find out why Vulkan app crash on android?</title>
          <dc:creator><![CDATA[gpu22]]></dc:creator>
          <category>Vulkan</category>
          <description><![CDATA[
            <p>how to find out why Vulkan app crash on android?</p>
            <p><small>2 posts - 2 participants</small></p>
            <p><a href="https://community.khronos.org/t/how-to-find-out-why-vulkan-app-crash-on-android/112537">Read full topic</a></p>
          ]]></description>
          <link>https://community.khronos.org/t/how-to-find-out-why-vulkan-app-crash-on-android/112537</link>
          <pubDate>Mon, 11 May 2026 01:43:28 +0000</pubDate>
          <discourse:topicPinned>No</discourse:topicPinned>
          <discourse:topicClosed>No</discourse:topicClosed>
          <discourse:topicArchived>No</discourse:topicArchived>
          <guid isPermaLink="false">community.khronos.org-topic-112537</guid>
          <source url="https://community.khronos.org/t/how-to-find-out-why-vulkan-app-crash-on-android/112537.rss">How to find out why Vulkan app crash on android?</source>
        </item>
        <item>
          <title>Open-source 3D Gaussian Splatting 3D Tiles Toolchain</title>
          <dc:creator><![CDATA[WilliamLiu-1997]]></dc:creator>
          <category>glTF: Showcase</category>
          <description><![CDATA[
            <p>Hi everyone,</p>
<p>I’d like to share a open-source toolchain I’ve been working on for using 3D Gaussian Splatting data in 3D Tiles / WebGIS workflows:</p>
<aside class="onebox githubrepo" data-onebox-src="https://github.com/WilliamLiu-1997/3DGS-PLY-3DTiles-Converter">
  <header class="source">

      <a href="https://github.com/WilliamLiu-1997/3DGS-PLY-3DTiles-Converter" target="_blank" rel="noopener nofollow ugc">github.com</a>
  </header>

  <article class="onebox-body">
    <div class="github-row" data-github-private-repo="false">
  <img width="690" height="344" src="https://community.khronos.org/uploads/default/optimized/2X/8/86651261566ca2a0af9f071be3de5a85b5cd8db7_2_690x344.png" class="thumbnail" data-dominant-color="EEEFEC">

  <h3><a href="https://github.com/WilliamLiu-1997/3DGS-PLY-3DTiles-Converter" target="_blank" rel="noopener nofollow ugc">GitHub - WilliamLiu-1997/3DGS-PLY-3DTiles-Converter: Convert Gaussian Splatting PLY files into 3D Tiles...</a></h3>

    <p><span class="github-repo-description">Convert Gaussian Splatting PLY files into 3D Tiles with adaptive LOD simplification and SPZ-compressed GLB output.</span></p>
</div>

  </article>

  <div class="onebox-metadata">
    
    
  </div>

  <div style="clear: both"></div>
</aside>

<aside class="onebox githubrepo" data-onebox-src="https://github.com/WilliamLiu-1997/3D-Tiles-RendererJS-3DGS-Plugin">
  <header class="source">

      <a href="https://github.com/WilliamLiu-1997/3D-Tiles-RendererJS-3DGS-Plugin" target="_blank" rel="noopener nofollow ugc">github.com</a>
  </header>

  <article class="onebox-body">
    <div class="github-row" data-github-private-repo="false">
  <img width="690" height="344" src="https://community.khronos.org/uploads/default/optimized/2X/f/f2ef4cabb298e5ed2fbde7bb706909802ebd46d3_2_690x344.png" class="thumbnail" data-dominant-color="E8EBEE">

  <h3><a href="https://github.com/WilliamLiu-1997/3D-Tiles-RendererJS-3DGS-Plugin" target="_blank" rel="noopener nofollow ugc">GitHub - WilliamLiu-1997/3D-Tiles-RendererJS-3DGS-Plugin: Gaussian splat tile plugin for 3d-tiles-renderer...</a></h3>

    <p><span class="github-repo-description">Gaussian splat tile plugin for 3d-tiles-renderer that streams Gaussian Splats content in Three.js via Spark</span></p>
</div>

  </article>

  <div class="onebox-metadata">
    
    
  </div>

  <div style="clear: both"></div>
</aside>

<aside class="onebox githubrepo" data-onebox-src="https://github.com/WilliamLiu-1997/3DTiles-Inspector">
  <header class="source">

      <a href="https://github.com/WilliamLiu-1997/3DTiles-Inspector" target="_blank" rel="noopener nofollow ugc">github.com</a>
  </header>

  <article class="onebox-body">
    <div class="github-row" data-github-private-repo="false">
  <img width="690" height="344" src="https://community.khronos.org/uploads/default/optimized/2X/0/0ba9dfb47a536f47933c5699c2e28d1b7c046997_2_690x344.png" class="thumbnail" data-dominant-color="F1F1EE">

  <h3><a href="https://github.com/WilliamLiu-1997/3DTiles-Inspector" target="_blank" rel="noopener nofollow ugc">GitHub - WilliamLiu-1997/3DTiles-Inspector: Interactive 3D Tiles tileset editor for geospatial...</a></h3>

    <p><span class="github-repo-description">Interactive 3D Tiles tileset editor for geospatial transform alignment, geometric error tuning and Gaussian Splat cropping.</span></p>
</div>

  </article>

  <div class="onebox-metadata">
    
    
  </div>

  <div style="clear: both"></div>
</aside>

<p>The goal is to make 3D Gaussian Splatting data easier to convert, stream, inspect, align, and use in browser-based 3D scenes.</p>
<p></p><div class="large-image-placeholder"><a href="https://i.redd.it/y445xpxdbwzg1.png" target="_blank" rel="noopener nofollow ugc"><svg class="fa d-icon d-icon-far-image svg-icon" aria-hidden="true"><use href="#far-image"></use></svg><span class="url">https://i.redd.it/y445xpxdbwzg1.png</span><span class="help">(image larger than 4 MB)</span></a></div><p></p>
<p><strong>3DGS PLY to 3D Tiles Converter</strong></p>
<p>This is a Node.js CLI / library for converting 3D Gaussian Splatting PLY models into explicit 3D Tiles tilesets.</p>
<p>Key features include:</p>
<p>Converts 3DGS PLY to hierarchical 3D Tiles</p>
<p>Uses SPZ-compressed GLB tile content</p>
<p>Supports large PLY processing with limited memory</p>
<p>Supports WGS84 placement or custom root transforms</p>
<p>Generates simplified parent LOD tiles for progressive loading and smoother LOD transitions</p>
<p><strong>3D Tiles RendererJS 3DGS Plugin</strong></p>
<p>This plugin adds support for loading Gaussian Splatting tile content in 3D Tiles RendererJS / Three.js workflows.</p>
<p>Key features include:</p>
<p>Loads 3D Tiles tilesets containing Gaussian Splatting GLB content</p>
<p>Parses Gaussian Splatting glTF extensions</p>
<p>Supports SPZ-compressed splat data</p>
<p>Enables tile-based loading and rendering of Gaussian Splatting scenes</p>
<p>Works with hierarchical 3D Tiles generated from large 3DGS models</p>
<p><strong>3DTiles Inspector</strong></p>
<p>The inspector is a local browser-based workflow for checking and adjusting 3D Tiles tilesets.</p>
<p>Key features include:</p>
<p>Open local 3D Tiles tilesets in a browser inspector</p>
<p>Adjust root transform for geospatial alignment</p>
<p>Tune geometric error and LOD behaviour</p>
<p>Inspect tile loading and tileset structure</p>
<p>Crop Gaussian Splatting tilesets and save the result back to disk</p>
<p>Together, these projects provide a workflow from conversion to runtime loading and local inspection:</p>
<p>3DGS PLY → 3D Tiles → inspect / align / crop → load in Three.js / WebGIS workflows</p>
<p>I’m still improving the projects and would be very interested in feedback from the community.</p>
<p>Any suggestions, testing results, or discussion would be very welcome.</p>
            <p><small>1 post - 1 participant</small></p>
            <p><a href="https://community.khronos.org/t/open-source-3d-gaussian-splatting-3d-tiles-toolchain/112535">Read full topic</a></p>
          ]]></description>
          <link>https://community.khronos.org/t/open-source-3d-gaussian-splatting-3d-tiles-toolchain/112535</link>
          <pubDate>Sun, 10 May 2026 15:24:49 +0000</pubDate>
          <discourse:topicPinned>No</discourse:topicPinned>
          <discourse:topicClosed>No</discourse:topicClosed>
          <discourse:topicArchived>No</discourse:topicArchived>
          <guid isPermaLink="false">community.khronos.org-topic-112535</guid>
          <source url="https://community.khronos.org/t/open-source-3d-gaussian-splatting-3d-tiles-toolchain/112535.rss">Open-source 3D Gaussian Splatting 3D Tiles Toolchain</source>
        </item>
        <item>
          <title>[OpenXR Specification] - Typo in the XrFovf(3) Manual Page</title>
          <dc:creator><![CDATA[zouiqad]]></dc:creator>
          <category>OpenXR</category>
          <description><![CDATA[
            <p>Hello,</p>
<p>I noticed perhaps a typo or something that needs clarifications in the OpenXR Specification in the XrFovf(3) Manual Page in the “Member Descriptions” we have :</p>
<ul>
<li><code>angleLeft</code> is the angle of the left side of the field of view. For a symmetric field of view this value is negative.</li>
<li><code>angleDown</code> is the angle of the bottom part of the field of view. For a symmetric field of view this value is negative.</li>
</ul>
<p>but that should be the contrary, for an asymmetric fov the value of the angles are negative and not for a symmetric one, a contradiction stated just bellow : “For a symmetric FoV, <code>angleRight</code> and <code>angleUp</code> will have positive values”, as i understand things, there is a typo in the member descriptions it should be “for an asymmetric fov” instead of “for a symmetric fov”.</p>
<p>ofc you can correct me if i’m wrong. Also, is there a way to contribute to the specification doc ?</p>
            <p><small>3 posts - 2 participants</small></p>
            <p><a href="https://community.khronos.org/t/openxr-specification-typo-in-the-xrfovf-3-manual-page/112528">Read full topic</a></p>
          ]]></description>
          <link>https://community.khronos.org/t/openxr-specification-typo-in-the-xrfovf-3-manual-page/112528</link>
          <pubDate>Tue, 05 May 2026 17:07:15 +0000</pubDate>
          <discourse:topicPinned>No</discourse:topicPinned>
          <discourse:topicClosed>No</discourse:topicClosed>
          <discourse:topicArchived>No</discourse:topicArchived>
          <guid isPermaLink="false">community.khronos.org-topic-112528</guid>
          <source url="https://community.khronos.org/t/openxr-specification-typo-in-the-xrfovf-3-manual-page/112528.rss">[OpenXR Specification] - Typo in the XrFovf(3) Manual Page</source>
        </item>
        <item>
          <title>OpenCL 3.1 is here</title>
          <dc:creator><![CDATA[khronos]]></dc:creator>
          <category>OpenCL</category>
          <description><![CDATA[
            <p>The Khronos Group is pushing more consistency into the spec by promoting several features from optional to core.</p>
<p>Including:</p>
<ul>
<li>SPIR-V kernel ingestion is now required</li>
<li>Subgroups + integer dot products are core</li>
<li>New queries for work-group sizing and device UUID (aligned with Vulkan)</li>
<li>Spec cleanups around memory model, sync, and printf</li>
</ul>
<p>Vendors + open source stacks are already working on support, including: Intel, Arm, Qualcomm, Mesa, Rusticl, PoCL, CLVK.</p>
<p>Find the full post here: <a href="https://www.khronos.org/blog/opencl-3.1-is-here?utm_medium=social&amp;utm_source=khrforums&amp;utm_campaign=OpenCL_3.1_is_here&amp;utm_content=blog" class="inline-onebox">OpenCL 3.1 is Here</a></p>
<p>Comment and share feedback on the <a href="https://github.com/KhronosGroup/OpenCL-Docs">OpenCL specification</a> GitHub or the <a href="https://www.khr.io/khrdiscord">Khronos Discord</a>.</p>
            <p><small>1 post - 1 participant</small></p>
            <p><a href="https://community.khronos.org/t/opencl-3-1-is-here/112527">Read full topic</a></p>
          ]]></description>
          <link>https://community.khronos.org/t/opencl-3-1-is-here/112527</link>
          <pubDate>Tue, 05 May 2026 13:13:56 +0000</pubDate>
          <discourse:topicPinned>No</discourse:topicPinned>
          <discourse:topicClosed>No</discourse:topicClosed>
          <discourse:topicArchived>No</discourse:topicArchived>
          <guid isPermaLink="false">community.khronos.org-topic-112527</guid>
          <source url="https://community.khronos.org/t/opencl-3-1-is-here/112527.rss">OpenCL 3.1 is here</source>
        </item>
        <item>
          <title>Hardware development and openxr</title>
          <dc:creator><![CDATA[point1024]]></dc:creator>
          <category>OpenXR</category>
          <description><![CDATA[
            <p>Why is everything so complicated? I’m currently working on a tracking device, and here’s what’s bothering me. Why can’t OpenXR simply listen to ports for data transfer regardless of the runtime environment? It turns out that to use the hardware in stimvr, you need a stimvr driver, and to use it in a different runtime environment, you also need to initialize the hardware differently… Basically, OpenXR currently doesn’t allow hardware developers to unify drivers. And that’s sad.</p>
            <p><small>4 posts - 4 participants</small></p>
            <p><a href="https://community.khronos.org/t/hardware-development-and-openxr/112525">Read full topic</a></p>
          ]]></description>
          <link>https://community.khronos.org/t/hardware-development-and-openxr/112525</link>
          <pubDate>Thu, 30 Apr 2026 12:15:24 +0000</pubDate>
          <discourse:topicPinned>No</discourse:topicPinned>
          <discourse:topicClosed>No</discourse:topicClosed>
          <discourse:topicArchived>No</discourse:topicArchived>
          <guid isPermaLink="false">community.khronos.org-topic-112525</guid>
          <source url="https://community.khronos.org/t/hardware-development-and-openxr/112525.rss">Hardware development and openxr</source>
        </item>
        <item>
          <title>How to set opengl up on linux manuelly (no ide) with clang?</title>
          <dc:creator><![CDATA[elevatedCluelessness]]></dc:creator>
          <category>OpenGL</category>
          <description><![CDATA[
            <p>Hi,</p>
<p>I have installed opengl with arch linus’s packages via AUR and pacman repos but still get linker errors trying to compile some examples like below:</p>
<pre><code class="lang-auto">$ clang -v dials.c 
clang version 22.1.2
Target: x86_64-pc-linux-gnu
Thread model: posix
InstalledDir: /usr/bin
Found candidate GCC installation: /usr/bin/../lib/gcc/x86_64-pc-linux-gnu/15.2.1
Found candidate GCC installation: /usr/bin/../lib64/gcc/x86_64-pc-linux-gnu/15.2.1
Selected GCC installation: /usr/bin/../lib64/gcc/x86_64-pc-linux-gnu/15.2.1
Candidate multilib: .;@m64
Candidate multilib: 32;@m32
Selected multilib: .;@m64
Found HIP installation: /opt/rocm, version 7.2.53211
 "/usr/bin/clang-22" -cc1 -triple x86_64-pc-linux-gnu -emit-obj -dumpdir a- -disable-free -clear-ast-before-backend -disable-llvm-verifier -discard-value-names -main-file-name dials.c -mrelocation-model pic -pic-level 2 -pic-is-pie -mframe-pointer=all -fmath-errno -ffp-contract=on -fno-rounding-math -mconstructor-aliases -funwind-tables=2 -target-cpu x86-64 -tune-cpu generic -debugger-tuning=gdb -fdebug-compilation-dir=/home/alek/Downloads/examples/examples -v -fcoverage-compilation-dir=/home/alek/Downloads/examples/examples -resource-dir /usr/lib/clang/22 -internal-isystem /usr/lib/clang/22/include -internal-isystem /usr/local/include -internal-isystem /usr/bin/../lib64/gcc/x86_64-pc-linux-gnu/15.2.1/../../../../x86_64-pc-linux-gnu/include -internal-externc-isystem /include -internal-externc-isystem /usr/include -ferror-limit 19 -fmessage-length=190 -stack-protector 2 -fgnuc-version=4.2.1 -fskip-odr-check-in-gmf -fcolor-diagnostics -faddrsig -fdwarf2-cfi-asm -o /tmp/dials-08e501.o -x c dials.c
clang -cc1 version 22.1.2 based upon LLVM 22.1.2 default target x86_64-pc-linux-gnu
ignoring nonexistent directory "/usr/bin/../lib64/gcc/x86_64-pc-linux-gnu/15.2.1/../../../../x86_64-pc-linux-gnu/include"
ignoring nonexistent directory "/include"
#include "..." search starts here:
#include &lt;...&gt; search starts here:
 /usr/lib/clang/22/include
 /usr/local/include
 /usr/include
End of search list.
 "/usr/bin/ld" --hash-style=gnu --build-id --eh-frame-hdr -m elf_x86_64 -pie -dynamic-linker /lib64/ld-linux-x86-64.so.2 -o a.out /usr/bin/../lib64/gcc/x86_64-pc-linux-gnu/15.2.1/../../../../lib64/Scrt1.o /usr/bin/../lib64/gcc/x86_64-pc-linux-gnu/15.2.1/../../../../lib64/crti.o /usr/bin/../lib64/gcc/x86_64-pc-linux-gnu/15.2.1/crtbeginS.o -L/usr/bin/../lib64/gcc/x86_64-pc-linux-gnu/15.2.1 -L/usr/bin/../lib64/gcc/x86_64-pc-linux-gnu/15.2.1/../../../../lib64 -L/lib/../lib64 -L/usr/lib64 -L/lib -L/usr/lib /tmp/dials-08e501.o -lgcc --as-needed -lgcc_s --no-as-needed -lc -lgcc --as-needed -lgcc_s --no-as-needed /usr/bin/../lib64/gcc/x86_64-pc-linux-gnu/15.2.1/crtendS.o /usr/bin/../lib64/gcc/x86_64-pc-linux-gnu/15.2.1/../../../../lib64/crtn.o
/usr/bin/ld: /tmp/dials-08e501.o: in function `drawCircle':
dials.c:(.text+0x15): undefined reference to `glPushMatrix'
/usr/bin/ld: dials.c:(.text+0x27): undefined reference to `glTranslatef'
/usr/bin/ld: dials.c:(.text+0x31): undefined reference to `glBegin'
/usr/bin/ld: dials.c:(.text+0x3c): undefined reference to `glVertex2f'
/usr/bin/ld: dials.c:(.text+0x72): undefined reference to `cos'
/usr/bin/ld: dials.c:(.text+0x9f): undefined reference to `sin'
/usr/bin/ld: dials.c:(.text+0xb9): undefined reference to `glVertex2f'
/usr/bin/ld: dials.c:(.text+0xe1): undefined reference to `glEnd'
/usr/bin/ld: dials.c:(.text+0xf4): undefined reference to `glColor3f'
/usr/bin/ld: dials.c:(.text+0xfe): undefined reference to `glBegin'
/usr/bin/ld: dials.c:(.text+0x109): undefined reference to `glVertex2f'
/usr/bin/ld: dials.c:(.text+0x135): undefined reference to `cos'
/usr/bin/ld: dials.c:(.text+0x176): undefined reference to `sin'
/usr/bin/ld: dials.c:(.text+0x190): undefined reference to `glVertex2f'
/usr/bin/ld: dials.c:(.text+0x195): undefined reference to `glEnd'
/usr/bin/ld: dials.c:(.text+0x19a): undefined reference to `glPopMatrix'
/usr/bin/ld: /tmp/dials-08e501.o: in function `displayDials':
dials.c:(.text+0x1be): undefined reference to `glClear'
/usr/bin/ld: dials.c:(.text+0x1e3): undefined reference to `glColor3f'
/usr/bin/ld: dials.c:(.text+0x232): undefined reference to `glutSwapBuffers'
/usr/bin/ld: /tmp/dials-08e501.o: in function `displayButtons':
dials.c:(.text+0x24e): undefined reference to `glClear'
/usr/bin/ld: dials.c:(.text+0x258): undefined reference to `glBegin'
/usr/bin/ld: dials.c:(.text+0x2bd): undefined reference to `glColor3f'
/usr/bin/ld: dials.c:(.text+0x2d2): undefined reference to `glColor3f'
/usr/bin/ld: dials.c:(.text+0x301): undefined reference to `glVertex2f'
/usr/bin/ld: dials.c:(.text+0x330): undefined reference to `glVertex2f'
/usr/bin/ld: dials.c:(.text+0x35f): undefined reference to `glVertex2f'
/usr/bin/ld: dials.c:(.text+0x38e): undefined reference to `glVertex2f'
/usr/bin/ld: dials.c:(.text+0x3aa): undefined reference to `glEnd'
/usr/bin/ld: dials.c:(.text+0x3af): undefined reference to `glutSwapBuffers'
/usr/bin/ld: /tmp/dials-08e501.o: in function `reshape':
dials.c:(.text+0x3d9): undefined reference to `glViewport'
/usr/bin/ld: dials.c:(.text+0x3e3): undefined reference to `glMatrixMode'
/usr/bin/ld: dials.c:(.text+0x3e8): undefined reference to `glLoadIdentity'
/usr/bin/ld: dials.c:(.text+0x3fd): undefined reference to `gluOrtho2D'
/usr/bin/ld: dials.c:(.text+0x402): undefined reference to `glutGetWindow'
/usr/bin/ld: dials.c:(.text+0x422): undefined reference to `glScalef'
/usr/bin/ld: dials.c:(.text+0x436): undefined reference to `glTranslatef'
/usr/bin/ld: dials.c:(.text+0x440): undefined reference to `glMatrixMode'
/usr/bin/ld: /tmp/dials-08e501.o: in function `dodial':
dials.c:(.text+0x483): undefined reference to `glutSetWindow'
/usr/bin/ld: dials.c:(.text+0x488): undefined reference to `glutPostRedisplay'
/usr/bin/ld: /tmp/dials-08e501.o: in function `dobutton':
dials.c:(.text+0x4df): undefined reference to `glutSetWindow'
/usr/bin/ld: dials.c:(.text+0x4e4): undefined reference to `glutPostRedisplay'
/usr/bin/ld: /tmp/dials-08e501.o: in function `main':
dials.c:(.text+0x51c): undefined reference to `glutInit'
/usr/bin/ld: dials.c:(.text+0x526): undefined reference to `glutDeviceGet'
/usr/bin/ld: dials.c:(.text+0x561): undefined reference to `glutDeviceGet'
/usr/bin/ld: dials.c:(.text+0x5a4): undefined reference to `glutInitDisplayMode'
/usr/bin/ld: dials.c:(.text+0x5cb): undefined reference to `glutInitWindowSize'
/usr/bin/ld: dials.c:(.text+0x5d7): undefined reference to `glutCreateWindow'
/usr/bin/ld: dials.c:(.text+0x602): undefined reference to `glClearColor'
/usr/bin/ld: dials.c:(.text+0x60f): undefined reference to `glLineWidth'
/usr/bin/ld: dials.c:(.text+0x61f): undefined reference to `glutDialsFunc'
/usr/bin/ld: dials.c:(.text+0x62f): undefined reference to `glutButtonBoxFunc'
/usr/bin/ld: dials.c:(.text+0x63b): undefined reference to `glutDisplayFunc'
/usr/bin/ld: dials.c:(.text+0x64b): undefined reference to `glutReshapeFunc'
/usr/bin/ld: dials.c:(.text+0x657): undefined reference to `glutInitWindowSize'
/usr/bin/ld: dials.c:(.text+0x663): undefined reference to `glutCreateWindow'
/usr/bin/ld: dials.c:(.text+0x67e): undefined reference to `glClearColor'
/usr/bin/ld: dials.c:(.text+0x68a): undefined reference to `glutDisplayFunc'
/usr/bin/ld: dials.c:(.text+0x693): undefined reference to `glutReshapeFunc'
/usr/bin/ld: dials.c:(.text+0x69c): undefined reference to `glutDialsFunc'
/usr/bin/ld: dials.c:(.text+0x6a5): undefined reference to `glutButtonBoxFunc'
/usr/bin/ld: dials.c:(.text+0x6aa): undefined reference to `glutMainLoop'
clang: error: linker command failed with exit code 1 (use -v to see invocation)
</code></pre>
            <p><small>4 posts - 3 participants</small></p>
            <p><a href="https://community.khronos.org/t/how-to-set-opengl-up-on-linux-manuelly-no-ide-with-clang/112519">Read full topic</a></p>
          ]]></description>
          <link>https://community.khronos.org/t/how-to-set-opengl-up-on-linux-manuelly-no-ide-with-clang/112519</link>
          <pubDate>Sat, 25 Apr 2026 19:41:12 +0000</pubDate>
          <discourse:topicPinned>No</discourse:topicPinned>
          <discourse:topicClosed>No</discourse:topicClosed>
          <discourse:topicArchived>No</discourse:topicArchived>
          <guid isPermaLink="false">community.khronos.org-topic-112519</guid>
          <source url="https://community.khronos.org/t/how-to-set-opengl-up-on-linux-manuelly-no-ide-with-clang/112519.rss">How to set opengl up on linux manuelly (no ide) with clang?</source>
        </item>
        <item>
          <title>Looking for old version of glslangvalidater</title>
          <dc:creator><![CDATA[JoshKlint]]></dc:creator>
          <category>OpenGL: Advanced Coding</category>
          <description><![CDATA[
            <p>I am looking for an old version of the glslangvalidater tool, as newer versions are focused on Vulkan. I want the best version for support of OpenGL 4.5. The ones on Khronos Github are all too new.<br>
I have a really old copy of it, but OpenGL 4.5 support is listed as “experimental”.</p>
<pre><code class="lang-auto">Usage: glslangValidator [option]... [file]...

Where: each 'file' ends in
    .conf to provide an optional config file that replaces the default configuration
          (see -c option below for generating a template)
    .vert for a vertex shader
    .tesc for a tessellation control shader
    .tese for a tessellation evaluation shader
    .geom for a geometry shader
    .frag for a fragment shader
    .comp for a compute shader

Compilation warnings and errors will be printed to stdout.

To get other information, use one of the following options:
(Each option must be specified separately, but can go anywhere in the command line.)
  -c  configuration dump; use to create default configuration file (redirect to a .conf file)
  -i  intermediate tree (glslang AST) is printed out
  -l  link validation of all input files
  -m  memory leak mode
  -q  dump reflection query database
  -r  relaxed semantic error-checking mode
  -s  silent mode
  -t  multi-threaded mode
  -v  print version strings
  -w  suppress warnings (except as required by #extension : warn)
</code></pre>
            <p><small>3 posts - 1 participant</small></p>
            <p><a href="https://community.khronos.org/t/looking-for-old-version-of-glslangvalidater/112509">Read full topic</a></p>
          ]]></description>
          <link>https://community.khronos.org/t/looking-for-old-version-of-glslangvalidater/112509</link>
          <pubDate>Sat, 18 Apr 2026 02:00:34 +0000</pubDate>
          <discourse:topicPinned>No</discourse:topicPinned>
          <discourse:topicClosed>No</discourse:topicClosed>
          <discourse:topicArchived>No</discourse:topicArchived>
          <guid isPermaLink="false">community.khronos.org-topic-112509</guid>
          <source url="https://community.khronos.org/t/looking-for-old-version-of-glslangvalidater/112509.rss">Looking for old version of glslangvalidater</source>
        </item>
        <item>
          <title>Vendor extension ratification</title>
          <dc:creator><![CDATA[emaschino]]></dc:creator>
          <category>OpenXR</category>
          <description><![CDATA[
            <p>Hi,</p>
<p>[Please redirect me if this is not the right forum/appropriate way to talk about this.]</p>
<p>Is there a way to follow what’s happening for a proposed vendor extension? I mean, how can we know if the extension will be accepted or cancelled, if discussions are still ongoing, etc.</p>
<p>Namely, I would like to know what’s happening with Magic Leap’s XR_ML_pixel_sensor extension. It seems to me that most Magic Leap’s extensions have been added in OpenXR 1.1.41 and then XR_ML_facial_expression in OpenXR 1.1.43. To date, I didn’t found XR_ML_pixel_sensor in any OpenXR release.</p>
<p>I have source code waiting for this extension for months (years?) and because of Magic Leap’s current situation, I’m wondering it this will ever happen…</p>
<p>Thanks!</p>
            <p><small>4 posts - 3 participants</small></p>
            <p><a href="https://community.khronos.org/t/vendor-extension-ratification/112507">Read full topic</a></p>
          ]]></description>
          <link>https://community.khronos.org/t/vendor-extension-ratification/112507</link>
          <pubDate>Thu, 16 Apr 2026 13:37:17 +0000</pubDate>
          <discourse:topicPinned>No</discourse:topicPinned>
          <discourse:topicClosed>No</discourse:topicClosed>
          <discourse:topicArchived>No</discourse:topicArchived>
          <guid isPermaLink="false">community.khronos.org-topic-112507</guid>
          <source url="https://community.khronos.org/t/vendor-extension-ratification/112507.rss">Vendor extension ratification</source>
        </item>
        <item>
          <title>OpenGL not displaying rectangle</title>
          <dc:creator><![CDATA[Leondagreatest]]></dc:creator>
          <category>OpenGL</category>
          <description><![CDATA[
            <p>I have checked the entire codebase and have not been able to recognize the problem.</p>
<p>Here’s the main part where I hypothesize it lies:</p>
<pre><code>unsigned int vertexShader;

if(compileVertexShader(&amp;vertexShader, vertexShaderSource) == FAIL)
{
    return FAIL;
}

unsigned int fragmentShader;

if(compileFragmentShader(&amp;fragmentShader, fragmentShaderSource) == FAIL)
{
    return FAIL;
}

unsigned int shaderProgram;
shaderProgram = glCreateProgram();

glAttachShader(shaderProgram, vertexShader);
glAttachShader(shaderProgram, fragmentShader);
glLinkProgram(shaderProgram);

if(checkShaderProgramSuccess(shaderProgram) == FAIL)
{
    return FAIL;
}

glDeleteShader(vertexShader);
glDeleteShader(fragmentShader);

unsigned int VBO;
unsigned int VAO;
unsigned int EBO;

glGenVertexArrays(1, &amp;VAO);
glGenBuffers(1, &amp;VBO);
glGenBuffers(1, &amp;EBO);

glBindVertexArray(VAO);

glBindBuffer(GL_ARRAY_BUFFER, VBO);
glBufferData(GL_ARRAY_BUFFER, sizeof(rectangle.vertices), rectangle.vertices, GL_STATIC_DRAW);

glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, EBO);
glBufferData(GL_ELEMENT_ARRAY_BUFFER, sizeof(rectangle.indices), rectangle.indices, GL_STATIC_DRAW);

glVertexAttribPointer(0, 3, GL_FLOAT, GL_FALSE, 3 * sizeof(float), (void*)0);
glEnableVertexAttribArray(0);

glBindBuffer(GL_ARRAY_BUFFER, 0);
glBindVertexArray(0);

while(!glfwWindowShouldClose(window))
{
    windowRender(window, shaderProgram, VBO, EBO);

    glfwPollEvents();
}

printf("Program closing due to user input. The program ran successfully without error.\n");

cleanup();

return SUCCESS;
</code></pre>
<p>And here’s the entire codebase</p>
<p>main.c</p>
<pre><code class="lang-auto">#include "main.h"

#include "window.h"
#include "display.h"
#include "shaders.h"

// gcc Assets/Code/main.c Assets/Code/window.c Assets/Code/display.c Assets/Code/shaders.c -lGLEW -lGL -lglfw -o "Game" -Wall

const char* vertexShaderSource = "#version 330 core\n"
    "layout (location = 0) in vec3 aPos;\n"
    "void main()\n"
    "{\n"
    "   gl_Position = vec4(aPos.x, aPos.y, aPos.z, 1.0);\n"
    "}\0";

const char* fragmentShaderSource = "#version 330 core\n"
    "out vec4 FragColor;\n"
    "void main()\n"
    "{\n"
    "FragColor = vec4(1.0f, 0.5f, 0.2f, 1.0f);\n"
    "}\0";

GLFWwindow* window;

float test_rectangle_vertices[] = {
        0.5f,  0.5f, 0.0f,  // top right
        0.5f, -0.5f, 0.0f,  // bottom right
        -0.5f, -0.5f, 0.0f,  // bottom left
        -0.5f,  0.5f, 0.0f   // top left
    };

unsigned int test_rectangle_indices[] = {
    0, 1, 3,
    1, 2, 3
};

void cleanup()
{
    if(window)
    {
        glfwDestroyWindow(window);
    }

    glfwTerminate();
}

void print_glfw_error()
{
    const char* error_ptr;
    glfwGetError(&amp;error_ptr);

    printf("%s\n", error_ptr);
}

void print_glew_error(GLenum error)
{
    printf("%s\n", glewGetErrorString(error));
}

bool initialize_glew()
{
    // GLAD is not very glad, GLEW is what makes me glad

    GLenum glewinit_return_value = glewInit();

    if(glewinit_return_value != GLEW_OK)
    {
        print_glew_error(glewinit_return_value);
        handle_error(true, true); // clean up, and the error was fatal

        return FAIL;
    }

    return SUCCESS;
}

void handle_error(bool is_cleanup, bool is_fatal)
{
    if(is_fatal)
    {
        printf("Fatal error. Program aborted.\n");
    }

    if(is_cleanup)
    {
        cleanup();
    }
}

void createShape(Shape* rectangle, float* shape_vertices, unsigned int*  shape_indices)
{
    printf("Creating shape...\n");

    rectangle-&gt;vertices = shape_vertices;
    rectangle-&gt;indices = shape_indices;

    printf("Shape created.\n");
}

int main()
{
    if(!glfwInit())
    {
        print_glfw_error();
        handle_error(false, true); // do not clean up, and the error was fatal
        return FAIL;
    }

    window = createWindow();

    if(window == NULL)
    {
        return FAIL;
    }

    if(initialize_glew() == FAIL)
    {
        return FAIL;
    }

    glViewport(0, 0, 1920, 1080);

    Shape rectangle;

    createShape(&amp;rectangle, test_rectangle_vertices, test_rectangle_indices);

    unsigned int vertexShader;

    if(compileVertexShader(&amp;vertexShader, vertexShaderSource) == FAIL)
    {
        return FAIL;
    }

    unsigned int fragmentShader;

    if(compileFragmentShader(&amp;fragmentShader, fragmentShaderSource) == FAIL)
    {
        return FAIL;
    }

    unsigned int shaderProgram;
    shaderProgram = glCreateProgram();

    glAttachShader(shaderProgram, vertexShader);
    glAttachShader(shaderProgram, fragmentShader);
    glLinkProgram(shaderProgram);

    if(checkShaderProgramSuccess(shaderProgram) == FAIL)
    {
        return FAIL;
    }

    glDeleteShader(vertexShader);
    glDeleteShader(fragmentShader);

    unsigned int VBO;
    unsigned int VAO;
    unsigned int EBO;

    glGenVertexArrays(1, &amp;VAO);
    glGenBuffers(1, &amp;VBO);
    glGenBuffers(1, &amp;EBO);

    glBindVertexArray(VAO);

    glBindBuffer(GL_ARRAY_BUFFER, VBO);
    glBufferData(GL_ARRAY_BUFFER, sizeof(rectangle.vertices), rectangle.vertices, GL_STATIC_DRAW);

    glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, EBO);
    glBufferData(GL_ELEMENT_ARRAY_BUFFER, sizeof(rectangle.indices), rectangle.indices, GL_STATIC_DRAW);

    glVertexAttribPointer(0, 3, GL_FLOAT, GL_FALSE, 3 * sizeof(float), (void*)0);
    glEnableVertexAttribArray(0);

    glBindBuffer(GL_ARRAY_BUFFER, 0);
    glBindVertexArray(0);

    while(!glfwWindowShouldClose(window))
    {
        windowRender(window, shaderProgram, VBO, EBO);

        glfwPollEvents();
    }

    printf("Program closing due to user input. The program ran successfully without error.\n");

    cleanup();

    return SUCCESS;
}
</code></pre>
<p>display.c</p>
<pre><code class="lang-auto">#include "main.h"

// Rectangle's gone. This is depressing.

void windowRender(GLFWwindow* window, unsigned int shaderProgram, unsigned int VAO, unsigned int EBO)
{
    glClearColor(0.0f, 0.0f, 0.0f, 1.0f);
    glClear(GL_COLOR_BUFFER_BIT);

    glUseProgram(shaderProgram);
    glBindVertexArray(VAO);
    glDrawElements(GL_TRIANGLES, 6, GL_UNSIGNED_INT, 0);

    glfwSwapBuffers(window);
}
</code></pre>
<pre><code class="lang-auto">#include "main.h"

// Please stop

bool compileVertexShader(unsigned int* vertexShaderInput, const char* vertexShaderSourceInput)
{
    *vertexShaderInput = glCreateShader(GL_VERTEX_SHADER);

    glShaderSource(*vertexShaderInput, 1, &amp;vertexShaderSourceInput, NULL);
    glCompileShader(*vertexShaderInput);

    int is_successful;
    char infoLog[512];

    glGetShaderiv(*vertexShaderInput, GL_COMPILE_STATUS, &amp;is_successful);

    if(!is_successful)
    {
        glGetShaderInfoLog(*vertexShaderInput, 512, NULL, infoLog);
        printf("Vertex shader compilation failed. Error log is as follows:\n%s", infoLog);

        handle_error(true, true); // clean up, and the error was fatal

        return FAIL;
    }

    return SUCCESS;
}

bool compileFragmentShader(unsigned int* fragmentShaderInput, const char* fragmentShaderSourceInput)
{
    *fragmentShaderInput = glCreateShader(GL_FRAGMENT_SHADER);

    glShaderSource(*fragmentShaderInput, 1, &amp;fragmentShaderSourceInput, NULL);
    glCompileShader(*fragmentShaderInput);

    int is_successful;
    char infoLog[512];

    glGetShaderiv(*fragmentShaderInput, GL_COMPILE_STATUS, &amp;is_successful);

    if(!is_successful)
    {
        glGetShaderInfoLog(*fragmentShaderInput, 512, NULL, infoLog);
        printf("Fragment shader compilation failed. Error log is as follows:\n%s", infoLog);

        handle_error(true, true); // clean up, and the error was fatal

        return FAIL;
    }

    return SUCCESS;
}

bool checkShaderProgramSuccess(unsigned int shaderProgram)
{
    int is_successful;
    char infoLog[512];

    glGetProgramiv(shaderProgram, GL_LINK_STATUS, &amp;is_successful);

    if(!is_successful)
    {
        glGetShaderInfoLog(shaderProgram, 512, NULL, infoLog);
        printf("Shader program compilation failed. Error log is as follows:\n%s", infoLog);

        handle_error(true, true); // clean up, and the error was fatal

        return FAIL;
    }

    return SUCCESS;
}
</code></pre>
<p>window.c</p>
<pre><code class="lang-auto">#include "main.h"

// Hours that the rectangle has been gone. It's just black. Darkness.

GLFWwindow* createWindow()
{
    GLFWwindow* window = glfwCreateWindow(1920, 1080, "Badpa", NULL, NULL);

    if(!window)
    {
        print_glfw_error();
        handle_error(true, true); // clean up, and the error was fatal

        return NULL;
    }

    glfwWindowHint(GLFW_CONTEXT_VERSION_MAJOR, 3);
    glfwWindowHint(GLFW_CONTEXT_VERSION_MINOR, 3);
    glfwWindowHint(GLFW_OPENGL_PROFILE, GLFW_OPENGL_CORE_PROFILE);

    glfwMakeContextCurrent(window);

    return window;
}
</code></pre>
<p>main.h</p>
<pre><code class="lang-auto">#pragma once

#include &lt;stdio.h&gt;
#include &lt;stdbool.h&gt;
#include &lt;stdlib.h&gt;

#include &lt;GL/glew.h&gt;
#include &lt;GLFW/glfw3.h&gt;

#define SUCCESS 0
#define FAIL 1

void cleanup();
void handle_error(bool is_cleanup, bool is_fatal);
void print_glfw_error();
void print_glew_error(GLenum error);
bool initialize_glew();

typedef struct{
    float* vertices;
    unsigned int* indices;
} Shape;
</code></pre>
<p>window.h</p>
<pre><code class="lang-auto">#pragma once

GLFWwindow* createWindow();
</code></pre>
<p>shaders.h</p>
<pre><code class="lang-auto">#pragma once

bool compileVertexShader(unsigned int* vertexShaderInput, const char* vertexShaderSourceInput);
bool compileFragmentShader(unsigned int* fragmentShaderInput, const char* fragmentShaderSourceInput);
bool checkShaderProgramSuccess(unsigned int shaderProgram);
</code></pre>
<p>display.h</p>
<pre><code class="lang-auto">#pragma once

bool windowRender(GLFWwindow* window, unsigned int shaderProgram, unsigned int VAO, unsigned int EBO);
</code></pre>
            <p><small>2 posts - 1 participant</small></p>
            <p><a href="https://community.khronos.org/t/opengl-not-displaying-rectangle/112504">Read full topic</a></p>
          ]]></description>
          <link>https://community.khronos.org/t/opengl-not-displaying-rectangle/112504</link>
          <pubDate>Wed, 15 Apr 2026 09:51:14 +0000</pubDate>
          <discourse:topicPinned>No</discourse:topicPinned>
          <discourse:topicClosed>No</discourse:topicClosed>
          <discourse:topicArchived>No</discourse:topicArchived>
          <guid isPermaLink="false">community.khronos.org-topic-112504</guid>
          <source url="https://community.khronos.org/t/opengl-not-displaying-rectangle/112504.rss">OpenGL not displaying rectangle</source>
        </item>
        <item>
          <title>How to use SDL2/GLES2 to test if the window is occluded?</title>
          <dc:creator><![CDATA[SwuduSusuwu]]></dc:creator>
          <category>OpenGL: User Software</category>
          <description><![CDATA[
            <p><a href="https://poe.com/s/n2ngvfKEQ1slS0mIPmvG" rel="noopener nofollow ugc">This discussion with <em>Solar-Pro-2</em> lists some platform-specific solutions</a>, but the software is supposed to function portable across all popular platforms (such as <em>Windows</em> or <em>Unix</em> derivatives).<br>
Wish to know how to use portable (<em>SDL2</em>/<em>GLES2</em>) functions to test if the <code>java</code> window is occluded (does not require maximized forefront window, just requires that the whole <code>java</code> window is occluded, which suggests compositors have improved), so that the physics loop is more course (less granular) when the contents are not shown.<br>
What prompted this was: noticed that <code>top</code> shows <code>xwayland</code> + <code>gnome-shell</code> <strong>CPU</strong> usage drops to ~0% when the <code>java</code> window is occluded, plus <code>java</code>’s <strong>CPU</strong> usage drops from 22% to 6% when occluded: the goal is that if the contents are not shown, to have 4x less physics steps, but 4x larger physics steps, which should lower <code>java</code> <strong>CPU</strong> usage down to 2%.<br>
Since <em>Linux</em> does this, guess <em>Windows</em> does too, so wish to know the most portable functions to use.</p>
<p>Source code for the <code>java</code> software is at <a href="https://community.khronos.org/t/susujava-floss-java-sim-now-uses-khronos-gles2-includes-jni-for-sdl2/112496/2" class="inline-onebox">SusuJava (FLOSS Java sim) now uses Khronos' GLES2 (includes JNI for SDL2) - #2 by SwuduSusuwu</a> , but guess this “occlusion mode” is not <code>java</code>-specific</p>
            <p><small>1 post - 1 participant</small></p>
            <p><a href="https://community.khronos.org/t/how-to-use-sdl2-gles2-to-test-if-the-window-is-occluded/112501">Read full topic</a></p>
          ]]></description>
          <link>https://community.khronos.org/t/how-to-use-sdl2-gles2-to-test-if-the-window-is-occluded/112501</link>
          <pubDate>Fri, 10 Apr 2026 01:58:58 +0000</pubDate>
          <discourse:topicPinned>No</discourse:topicPinned>
          <discourse:topicClosed>No</discourse:topicClosed>
          <discourse:topicArchived>No</discourse:topicArchived>
          <guid isPermaLink="false">community.khronos.org-topic-112501</guid>
          <source url="https://community.khronos.org/t/how-to-use-sdl2-gles2-to-test-if-the-window-is-occluded/112501.rss">How to use SDL2/GLES2 to test if the window is occluded?</source>
        </item>
        <item>
          <title>SusuJava (FLOSS Java sim) now uses Khronos&#39; GLES2 (includes JNI for SDL2)</title>
          <dc:creator><![CDATA[SwuduSusuwu]]></dc:creator>
          <category>Self Promotion</category>
          <description><![CDATA[
            <h1><a name="p-445144-discussion-1" class="anchor" href="https://community.khronos.org#p-445144-discussion-1" aria-label="Heading link"></a>Discussion</h1>
<p><strong><a href="https://github.com/SwuduSusuwu/SusuJava/blob/pos2_PosBounds/posts/FishSim.md" rel="noopener nofollow ugc">SusuJava</a></strong> is a simple group of <code>java</code> classes (produced to encourage more <code>java</code> uses), but which does include some simple demos (<strong><a href="https://github.com/SwuduSusuwu/SusuJava/blob/pos2_PosBounds/susuwu/FishSim.java" rel="noopener nofollow ugc">FishSim.java</a></strong> shows how to use the included <code>java</code> classes to produce a simple artificial ocean with a thousand small fish which swim around).<br>
The <strong><a href="https://github.com/SwuduSusuwu/SusuJava/pull/1" rel="noopener nofollow ugc">copilot/replace-javafx-with-sdl2-opengles</a></strong> <a href="https://github.com/SwuduSusuwu/SusuJava/pull/1" rel="noopener nofollow ugc"> branch</a> includes:</p>
<ul>
<li><strong><a href="https://github.com/SwuduSusuwu/SusuJava/blob/copilot/replace-javafx-with-sdl2-opengles/susuwu/SdlGles2.java" rel="noopener nofollow ugc">susuwu/SdlGles2.java</a></strong></li>
<li><strong><a href="https://github.com/SwuduSusuwu/SusuJava/blob/copilot/replace-javafx-with-sdl2-opengles/susuwu/sdl_gles2_jni.c" rel="noopener nofollow ugc">susuwu/sdl_gles2_jni.c</a></strong></li>
<li><a href="https://github.com/SwuduSusuwu/SusuJava/blob/copilot/replace-javafx-with-sdl2-opengles/susuwu/FishSim.java" rel="noopener nofollow ugc">this </a><em><a href="https://github.com/SwuduSusuwu/SusuJava/blob/copilot/replace-javafx-with-sdl2-opengles/susuwu/FishSim.java" rel="noopener nofollow ugc">GLES2</a></em> <a href="https://github.com/SwuduSusuwu/SusuJava/blob/copilot/replace-javafx-with-sdl2-opengles/susuwu/FishSim.java" rel="noopener nofollow ugc"> version of </a><strong><a href="https://github.com/SwuduSusuwu/SusuJava/blob/copilot/replace-javafx-with-sdl2-opengles/susuwu/FishSim.java" rel="noopener nofollow ugc">susuwu/FishSim.java</a></strong></li>
<li><a href="https://github.com/SwuduSusuwu/SusuJava/blob/copilot/replace-javafx-with-sdl2-opengles/susuwu/SimUsages.java" rel="noopener nofollow ugc">this </a><em><a href="https://github.com/SwuduSusuwu/SusuJava/blob/copilot/replace-javafx-with-sdl2-opengles/susuwu/SimUsages.java" rel="noopener nofollow ugc">GLES2</a></em> <a href="https://github.com/SwuduSusuwu/SusuJava/blob/copilot/replace-javafx-with-sdl2-opengles/susuwu/SimUsages.java" rel="noopener nofollow ugc"> version of </a><strong><a href="https://github.com/SwuduSusuwu/SusuJava/blob/copilot/replace-javafx-with-sdl2-opengles/susuwu/SimUsages.java" rel="noopener nofollow ugc">susuwu/SimUsages.java</a></strong></li>
<li><a href="https://github.com/SwuduSusuwu/SusuJava/blob/copilot/replace-javafx-with-sdl2-opengles/build.sh" rel="noopener nofollow ugc">this </a><em><a href="https://github.com/SwuduSusuwu/SusuJava/blob/copilot/replace-javafx-with-sdl2-opengles/build.sh" rel="noopener nofollow ugc">GLES2</a></em> <a href="https://github.com/SwuduSusuwu/SusuJava/blob/copilot/replace-javafx-with-sdl2-opengles/build.sh" rel="noopener nofollow ugc"> version of </a><strong><a href="https://github.com/SwuduSusuwu/SusuJava/blob/copilot/replace-javafx-with-sdl2-opengles/build.sh" rel="noopener nofollow ugc">build.sh</a></strong></li>
</ul>
<p>The other files of source code are generic <code>java</code> classes (not included in this post since those do not use <em>Khronos</em> tools such as <code>GLES2</code>, but are <a href="https://github.com/SwuduSusuwu/SusuJava/tree/pos2_PosBounds/susuwu" rel="noopener nofollow ugc">also published</a> <em>FLOSS</em> (usable through <em>GPLv2</em> or <em>Apache 2</em>)).</p>
<p>Current plans: <em>merge</em> the <strong><a href="https://github.com/SwuduSusuwu/SusuJava/tree/copilot/replace-javafx-with-sdl2-opengles" rel="noopener nofollow ugc">copilot/replace-javafx-with-sdl2-opengles</a></strong> <a href="https://github.com/SwuduSusuwu/SusuJava/tree/copilot/replace-javafx-with-sdl2-opengles" rel="noopener nofollow ugc"> branch</a> into the <strong><a href="https://github.com/SwuduSusuwu/SusuJava/tree/new" rel="noopener nofollow ugc">new</a></strong> <a href="https://github.com/SwuduSusuwu/SusuJava/tree/new" rel="noopener nofollow ugc"> branch</a> plus into the <strong><a href="https://github.com/SwuduSusuwu/SusuJava/tree/pos2" rel="noopener nofollow ugc">pos2</a></strong> <a href="https://github.com/SwuduSusuwu/SusuJava/tree/pos2" rel="noopener nofollow ugc"> branch</a>, as soon as <strong><a href="https://github.com/SwuduSusuwu/SusuJava/blob/copilot/replace-javafx-with-sdl2-opengles/susuwu/sdl_gles2_jni.c" rel="noopener nofollow ugc">susuwu/sdl_gles2_jni.c</a></strong> is removed (the goal of <code>SusuJava</code> is to use pure <code>java</code>.)</p>
<p>Problems: no regressions on <em>Ubuntu</em> (from the switch from <code>javafx</code> to <code>GLES2</code> ), but <a href="https://github.com/termux-play-store/termux-issues/issues/670#issuecomment-4186042210" rel="noopener nofollow ugc">still can not execute on </a><em><a href="https://github.com/termux-play-store/termux-issues/issues/670#issuecomment-4186042210" rel="noopener nofollow ugc">Termux</a></em> due to:</p>
<pre><code class="lang-auto">~/SusuJava $ ./build.sh
MESA: error: ZINK: failed to choose pdev
libEGL warning: egl: failed to create dri2 screen
</code></pre>
<p>If you wish this to continue (to have more new versions published), then give suggestions for how <em>Termux</em> should execute the new <code>GLES2</code> version of <code>SusuJava</code> .</p>
            <p><small>2 posts - 1 participant</small></p>
            <p><a href="https://community.khronos.org/t/susujava-floss-java-sim-now-uses-khronos-gles2-includes-jni-for-sdl2/112496">Read full topic</a></p>
          ]]></description>
          <link>https://community.khronos.org/t/susujava-floss-java-sim-now-uses-khronos-gles2-includes-jni-for-sdl2/112496</link>
          <pubDate>Mon, 06 Apr 2026 01:55:53 +0000</pubDate>
          <discourse:topicPinned>No</discourse:topicPinned>
          <discourse:topicClosed>No</discourse:topicClosed>
          <discourse:topicArchived>No</discourse:topicArchived>
          <guid isPermaLink="false">community.khronos.org-topic-112496</guid>
          <source url="https://community.khronos.org/t/susujava-floss-java-sim-now-uses-khronos-gles2-includes-jni-for-sdl2/112496.rss">SusuJava (FLOSS Java sim) now uses Khronos&#39; GLES2 (includes JNI for SDL2)</source>
        </item>
        <item>
          <title>Hypothesis on how to produce close-to-human intelligences for avatars in procedural worlds</title>
          <dc:creator><![CDATA[SwuduSusuwu]]></dc:creator>
          <category>Self Promotion</category>
          <description><![CDATA[
            <p><a href="https://share.google/aimode/NRfwggtJgawPz6nia" rel="noopener nofollow ugc"><em>Google Assistant</em> discusses how to produce synthetic neural tissue with attributes similar to the “<em>Yakumo Ran</em> supercomputer”</a>. <em>Notice</em>: the first few messages are whimsical narrative analysis, but most of the discussion is about which tools to use to produce such systems.<br>
This would use Khronos’ <em>OpenGL</em>, <em>GLES</em>, or <em>Vulkan</em> to render the avatars + <a href="https://github.com/IRCSS/Blender-Geometry-Node-French-Houses" rel="noopener nofollow ugc">procedural</a> worlds.<br>
This would use Khronos’ <em>OpenCL</em> for execution of the synthetic neural tissues (such as the <a href="https://blog.tensorflow.org/2020/08/faster-mobile-gpu-inference-with-opencl.html#:~:text=In%20fact%2C%20the%20OpenCL%20backend,through%20the%20delegate's%20fallback%20mechanism." rel="noopener nofollow ugc"><em>Open Compute</em> version of <em>TensorFlow</em> inference</a>)<br>
If you continue the discussion with Google Assistant, you can ask for more specifics on how to do this: guess Google Assistant can produce most of the source code for you, but supercomputers are required to process the “base-level” connectome, so can not do this alone. Once all suitable public <a href="https://www.tensorflow.org/datasets" rel="noopener nofollow ugc">datasets</a> are <a href="https://www.tensorflow.org/tutorials/generative/autoencoder" rel="noopener nofollow ugc">autoencoded</a> into the “base-level” connectome, such should allow to “<a href="https://www.tensorflow.org/tutorials/images/transfer_learning" rel="noopener nofollow ugc">transfer learn</a>” on consumer devices to produce personalized intelligences which best suit the current user’s specific values.</p>
<p>If encouraged, will do best to produce this on own, but do not have much disk storage, plus just own a few consumer-class processors, so the “close-to-human intelligence” would get lowered to “animal-Plus intelligence” if must do this on own: <a href="https://share.google/aimode/kk50ZeGn7gPGzJ2K4" rel="noopener nofollow ugc"><em>Google Assistant</em> suggests you must purchase access to server clusters with tens of thousands of <em>GPU</em>s for months of continuous use (which costs millions of US$) to produce connectomes for synthetic neural systems such as <em>Grok-2</em>, due to the “exponential explosion” of solutions required to autoencode compressed human intelligence into coefficients for simple architectures such as <em>TensorFlow</em>, plus shows pseudocode for TensorFlow architectures which include zones as the hippocampus, neocortex, thalamus, basal ganglia, prefrontal cortex, visual cortices, plus numerous other zones relevent to avatars in sims</a>.</p>
            <p><small>1 post - 1 participant</small></p>
            <p><a href="https://community.khronos.org/t/hypothesis-on-how-to-produce-close-to-human-intelligences-for-avatars-in-procedural-worlds/112492">Read full topic</a></p>
          ]]></description>
          <link>https://community.khronos.org/t/hypothesis-on-how-to-produce-close-to-human-intelligences-for-avatars-in-procedural-worlds/112492</link>
          <pubDate>Mon, 30 Mar 2026 20:15:57 +0000</pubDate>
          <discourse:topicPinned>No</discourse:topicPinned>
          <discourse:topicClosed>No</discourse:topicClosed>
          <discourse:topicArchived>No</discourse:topicArchived>
          <guid isPermaLink="false">community.khronos.org-topic-112492</guid>
          <source url="https://community.khronos.org/t/hypothesis-on-how-to-produce-close-to-human-intelligences-for-avatars-in-procedural-worlds/112492.rss">Hypothesis on how to produce close-to-human intelligences for avatars in procedural worlds</source>
        </item>
        <item>
          <title>Suggesting Vulkan for UI</title>
          <dc:creator><![CDATA[Kyoungmun]]></dc:creator>
          <category>Community Talk</category>
          <description><![CDATA[
            <p>Hello,<br>
these days, UI really sucks (sorry)<br>
I mean, UI for applications</p>
<p>I used MFC long time ago, but that is no more<br>
I don’t want to use Qt nor QML</p>
<p>These days, all UI are focusing on Web style</p>
<p>So, I am looking for UI which is web based and cross-platform (Windows, Linux, Android)<br>
also, I want to develop UI using C++</p>
<p>Therefore, how about Vulkan for UI ?</p>
<p>This Vulkan for UI offers<br>
Web based (HTML, CSS) UI Design (Button, Combo, Slider, Edit Control, Tab Control, Tool Bar etc)<br>
also 3D UI Style Feature using Vulkan Graphics API (Cube-like Button, for example)<br>
Cross-Platform (Windows, Linux, Android)<br>
Unicode Text, Multi-Language Support<br>
Works well with Vulkan Rendering, Vulkan Compute etc<br>
using Modern C++</p>
<p>So can Khronos create new UI API (Vulkan for UI) as above, in near future?</p>
<p>I really want this happen and want to suggest my idea to Khronos</p>
<p>Thank you</p>
            <p><small>2 posts - 1 participant</small></p>
            <p><a href="https://community.khronos.org/t/suggesting-vulkan-for-ui/112489">Read full topic</a></p>
          ]]></description>
          <link>https://community.khronos.org/t/suggesting-vulkan-for-ui/112489</link>
          <pubDate>Sat, 28 Mar 2026 08:10:57 +0000</pubDate>
          <discourse:topicPinned>No</discourse:topicPinned>
          <discourse:topicClosed>No</discourse:topicClosed>
          <discourse:topicArchived>No</discourse:topicArchived>
          <guid isPermaLink="false">community.khronos.org-topic-112489</guid>
          <source url="https://community.khronos.org/t/suggesting-vulkan-for-ui/112489.rss">Suggesting Vulkan for UI</source>
        </item>
        <item>
          <title>What&#39;s the best way to deal with pipelineCache, eps. cache miss at runtime</title>
          <dc:creator><![CDATA[gpu22]]></dc:creator>
          <category>Vulkan</category>
          <description><![CDATA[
            <p>what’s the best way to deal with pipelineCache, eps. cache miss at runtime</p>
            <p><small>2 posts - 1 participant</small></p>
            <p><a href="https://community.khronos.org/t/whats-the-best-way-to-deal-with-pipelinecache-eps-cache-miss-at-runtime/112487">Read full topic</a></p>
          ]]></description>
          <link>https://community.khronos.org/t/whats-the-best-way-to-deal-with-pipelinecache-eps-cache-miss-at-runtime/112487</link>
          <pubDate>Thu, 26 Mar 2026 04:53:30 +0000</pubDate>
          <discourse:topicPinned>No</discourse:topicPinned>
          <discourse:topicClosed>No</discourse:topicClosed>
          <discourse:topicArchived>No</discourse:topicArchived>
          <guid isPermaLink="false">community.khronos.org-topic-112487</guid>
          <source url="https://community.khronos.org/t/whats-the-best-way-to-deal-with-pipelinecache-eps-cache-miss-at-runtime/112487.rss">What&#39;s the best way to deal with pipelineCache, eps. cache miss at runtime</source>
        </item>
        <item>
          <title>I can only use one vkfence per submit</title>
          <dc:creator><![CDATA[yummycookie]]></dc:creator>
          <category>Vulkan</category>
          <description><![CDATA[
            <p>In my code I have 2 command buffers(A and B). I submit them together and I want to know on the host when A is finished and to know when B is finished. For that I have a vkfence to put in vksubmit but I can only put one vkfence. this is weird for me because i can use multiple semaphores but only one fence. is there a right way to deal with it without calling vkQueueSubmit more than once?</p>
            <p><small>2 posts - 2 participants</small></p>
            <p><a href="https://community.khronos.org/t/i-can-only-use-one-vkfence-per-submit/112486">Read full topic</a></p>
          ]]></description>
          <link>https://community.khronos.org/t/i-can-only-use-one-vkfence-per-submit/112486</link>
          <pubDate>Tue, 24 Mar 2026 03:39:38 +0000</pubDate>
          <discourse:topicPinned>No</discourse:topicPinned>
          <discourse:topicClosed>No</discourse:topicClosed>
          <discourse:topicArchived>No</discourse:topicArchived>
          <guid isPermaLink="false">community.khronos.org-topic-112486</guid>
          <source url="https://community.khronos.org/t/i-can-only-use-one-vkfence-per-submit/112486.rss">I can only use one vkfence per submit</source>
        </item>
        <item>
          <title>Resolving a multisample stencil texture</title>
          <dc:creator><![CDATA[JoshKlint]]></dc:creator>
          <category>OpenGL</category>
          <description><![CDATA[
            <p>A “resolved” multisample depth texture is not particularly useful, but the stencil component of a Depth24/Stencil8 texture could be, if the resolve step includes all bit values of each subpixel.</p>
<p>For example, a 4x multisample pixel with stencil values like this could be resolved into a single value 1|2|4.</p>
<pre><code class="lang-auto">1|2  4
 0   1
</code></pre>
<p>Is this a supported feature?</p>
            <p><small>2 posts - 1 participant</small></p>
            <p><a href="https://community.khronos.org/t/resolving-a-multisample-stencil-texture/112485">Read full topic</a></p>
          ]]></description>
          <link>https://community.khronos.org/t/resolving-a-multisample-stencil-texture/112485</link>
          <pubDate>Sun, 22 Mar 2026 07:36:05 +0000</pubDate>
          <discourse:topicPinned>No</discourse:topicPinned>
          <discourse:topicClosed>No</discourse:topicClosed>
          <discourse:topicArchived>No</discourse:topicArchived>
          <guid isPermaLink="false">community.khronos.org-topic-112485</guid>
          <source url="https://community.khronos.org/t/resolving-a-multisample-stencil-texture/112485.rss">Resolving a multisample stencil texture</source>
        </item>
        <item>
          <title>Using the stencil buffer for the first time</title>
          <dc:creator><![CDATA[JoshKlint]]></dc:creator>
          <category>OpenGL: Advanced Coding</category>
          <description><![CDATA[
            <p>I want to use the stencil buffer to mask out my background in a deferred renderer, so the full-screen directional light pass only draws to pixels that have had something drawn to them, and for other things. So far it is not working in a predictable way.</p>
<p>The stencil buffer is cleared like this:</p>
<pre><code class="lang-auto">glStencilMask(0xFF);
glClearNamedFramebufferfi(fbo, GL_DEPTH_STENCIL, 0, 1.0f, 0);
glStencilMask(0x1);
</code></pre>
<p>I prepare to draw objects like this:</p>
<pre><code class="lang-auto">glEnable(GL_STENCIL_TEST);
glStencilOp(GL_REPLACE, GL_REPLACE, GL_REPLACE);
glStencilFunc(GL_ALWAYS, 1, 0xFF);
glStencilMask(0x1);
</code></pre>
<p>Now I get ready to draw the full-screen pass for directional lights:</p>
<pre><code class="lang-auto">glEnable(GL_STENCIL_TEST);
glStencilOp(GL_KEEP, GL_KEEP, GL_KEEP);
glStencilFunc(GL_EQUAL, 0, 0xFF);// Background pixels get drawn to
//glStencilFunc(GL_EQUAL, 1, 0xFF);// Nothing gets drawn
glStencilMask(0);
</code></pre>
<p>If I use glStencilFunc(GL_EQUAL, 0, 0xFF) then the full-screen pass draws to the background pixels (where nothing has been drawn).<br>
</p><div class="lightbox-wrapper"><a class="lightbox" href="https://community.khronos.org/uploads/default/original/2X/6/6a5f29a654fcb57a1b7bdbb85b5b2395c23d4e2a.jpeg" data-download-href="https://community.khronos.org/uploads/default/6a5f29a654fcb57a1b7bdbb85b5b2395c23d4e2a" title="image"><img src="https://community.khronos.org/uploads/default/optimized/2X/6/6a5f29a654fcb57a1b7bdbb85b5b2395c23d4e2a_2_690x404.jpeg" alt="image" data-base62-sha1="fb0uOsXFd8s5wCv1tPCr2ndyLr4" width="690" height="404" srcset="https://community.khronos.org/uploads/default/optimized/2X/6/6a5f29a654fcb57a1b7bdbb85b5b2395c23d4e2a_2_690x404.jpeg, https://community.khronos.org/uploads/default/optimized/2X/6/6a5f29a654fcb57a1b7bdbb85b5b2395c23d4e2a_2_1035x606.jpeg 1.5x, https://community.khronos.org/uploads/default/original/2X/6/6a5f29a654fcb57a1b7bdbb85b5b2395c23d4e2a.jpeg 2x" data-dominant-color="4F5C68"></a></div><p></p>
<p>This indicates that the FBO is correctly set up with an active stencil buffer attached.</p>
<p>However, calling glStencilFunc(GL_EQUAL, 1, 0xFF) does not draw lighting on my foreground pixels (where objects have been drawn). I just get a black screen instead.<br>
</p><div class="lightbox-wrapper"><a class="lightbox" href="https://community.khronos.org/uploads/default/original/2X/6/6b760630efb91c88648deb9efe1ef2975c5ddc2a.png" data-download-href="https://community.khronos.org/uploads/default/6b760630efb91c88648deb9efe1ef2975c5ddc2a" title="image"><img src="https://community.khronos.org/uploads/default/optimized/2X/6/6b760630efb91c88648deb9efe1ef2975c5ddc2a_2_690x404.png" alt="image" data-base62-sha1="fkDXcY1DcX41L6vcww1KYJWXoDM" width="690" height="404" srcset="https://community.khronos.org/uploads/default/optimized/2X/6/6b760630efb91c88648deb9efe1ef2975c5ddc2a_2_690x404.png, https://community.khronos.org/uploads/default/optimized/2X/6/6b760630efb91c88648deb9efe1ef2975c5ddc2a_2_1035x606.png 1.5x, https://community.khronos.org/uploads/default/original/2X/6/6b760630efb91c88648deb9efe1ef2975c5ddc2a.png 2x" data-dominant-color="080808"></a></div><p></p>
<p>What am I doing wrong?</p>
            <p><small>7 posts - 2 participants</small></p>
            <p><a href="https://community.khronos.org/t/using-the-stencil-buffer-for-the-first-time/112484">Read full topic</a></p>
          ]]></description>
          <link>https://community.khronos.org/t/using-the-stencil-buffer-for-the-first-time/112484</link>
          <pubDate>Sat, 21 Mar 2026 22:50:35 +0000</pubDate>
          <discourse:topicPinned>No</discourse:topicPinned>
          <discourse:topicClosed>No</discourse:topicClosed>
          <discourse:topicArchived>No</discourse:topicArchived>
          <guid isPermaLink="false">community.khronos.org-topic-112484</guid>
          <source url="https://community.khronos.org/t/using-the-stencil-buffer-for-the-first-time/112484.rss">Using the stencil buffer for the first time</source>
        </item>
        <item>
          <title>Reverse Z Depth Buffer</title>
          <dc:creator><![CDATA[SpiderPig]]></dc:creator>
          <category>OpenGL</category>
          <description><![CDATA[
            <p>Hello,</p>
<p>I am trying to get Reverse Z working for my application but am not quite getting there.  I managed to get the scene rendering again (except the skybox but I think that’s just a shader issue) but all my models are inside out and the front objects are being rendered behind the back objects.  My setup is +Z forward and matrices should be column major.</p>
<p>I can’t quite figure it out!</p>
<p>I wonder if anyone would be kind enough to take a glance at some of my matrices?  And setup?</p>
<p>I change the OpenGL stuff like this at app startup.</p>
<pre><code class="lang-auto">glEnable(GL_DEPTH_TEST);
glDepthFunc(GL_GREATER);
glClearDepth(0.0f);
glDepthRange(1.0, 0.0);
</code></pre>
<p>And then my perspective matrix is changed to this.</p>
<pre><code class="lang-auto">void dMat4::SetIdentity() {
    for (int i = 0; i &lt; 16; i++) {
        data[i] = (i % 5 == 0) ? 1.0 : 0.0;
    }
}

void dMat4::SetPerspective(double fov, double aspect, double near, double far) {

    auto tanHalfFov = std::tan(fov * 0.5);

    SetIdentity();

    data[0] = 1.0 / (aspect * tanHalfFov);
    data[5] = 1.0 / tanHalfFov;

    data[10] = 0.0;
    data[11] = 1.0;

    data[14] = near;
    data[15] = 0.0;
}
</code></pre>
<p>I also have an GL_DEPTH_COMPONENT32 depth buffer.</p>
<p>Does my perspective matrix look okay?  Thanks for any insight you might have.  <img src="https://community.khronos.org/images/emoji/twitter/slight_smile.png?v=14" title=":slight_smile:" class="emoji" alt=":slight_smile:" loading="lazy" width="20" height="20"></p>
            <p><small>10 posts - 2 participants</small></p>
            <p><a href="https://community.khronos.org/t/reverse-z-depth-buffer/112483">Read full topic</a></p>
          ]]></description>
          <link>https://community.khronos.org/t/reverse-z-depth-buffer/112483</link>
          <pubDate>Sat, 21 Mar 2026 19:46:23 +0000</pubDate>
          <discourse:topicPinned>No</discourse:topicPinned>
          <discourse:topicClosed>No</discourse:topicClosed>
          <discourse:topicArchived>No</discourse:topicArchived>
          <guid isPermaLink="false">community.khronos.org-topic-112483</guid>
          <source url="https://community.khronos.org/t/reverse-z-depth-buffer/112483.rss">Reverse Z Depth Buffer</source>
        </item>
        <item>
          <title>How should I manage resources used in multiple queue families?</title>
          <dc:creator><![CDATA[Userunmanned]]></dc:creator>
          <category>Vulkan</category>
          <description><![CDATA[
            <p>I’ve been using Vulkan for about 7 months now and I’ve decided to start building a render graph. I was working on barrier generation when I realized I knew nothing about cross queue transfers and release/acquire barrier pairs. Most of what I know has been through AI, so forgive me if anything I say is flawed. I have a handful of questions regarding this matter that I would love help from a real person from though.</p>
<p>1: I noticed on <a href="https://developer.nvidia.com/blog/vulkan-dos-donts/" rel="noopener nofollow ugc">this</a> website this note:</p>
<ul>
<li><code>VkSharingMode</code> is ignored by the driver, so <code>VK_SHARING_MODE_CONCURRENT</code> incurs no overhead relative to <code>VK_SHARING_MODE_EXCLUSIVE</code>.</li>
</ul>
<p>Is that really true? Can I still write relatively simple barriers for no cost?</p>
<p>2: If I have a release barrier at the end of a frame that should send a resource from Queue A to Queue B, but my render graph is recompiled and barriers are re-generated, can I treat the orphaned release barrier as if it never existed, or do I have to place an acquire on Queue B before I can do anything meaningful with the resource again?</p>
<p>3: I’m assuming the answer is yes, but is queue family ownership static? For example, if a resource is used on Queue B, I assume I can’t use it Queue A even if I want a couple frames.</p>
<p>Any help would be appreciated on all of these.</p>
            <p><small>5 posts - 2 participants</small></p>
            <p><a href="https://community.khronos.org/t/how-should-i-manage-resources-used-in-multiple-queue-families/112481">Read full topic</a></p>
          ]]></description>
          <link>https://community.khronos.org/t/how-should-i-manage-resources-used-in-multiple-queue-families/112481</link>
          <pubDate>Sat, 21 Mar 2026 14:55:34 +0000</pubDate>
          <discourse:topicPinned>No</discourse:topicPinned>
          <discourse:topicClosed>No</discourse:topicClosed>
          <discourse:topicArchived>No</discourse:topicArchived>
          <guid isPermaLink="false">community.khronos.org-topic-112481</guid>
          <source url="https://community.khronos.org/t/how-should-i-manage-resources-used-in-multiple-queue-families/112481.rss">How should I manage resources used in multiple queue families?</source>
        </item>
  </channel>
</rss>
