gpu_buffer.glsl (2607B)
1 /* This Source Code Form is subject to the terms of the Mozilla Public 2 * License, v. 2.0. If a copy of the MPL was not distributed with this 3 * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ 4 5 uniform HIGHP_SAMPLER_FLOAT sampler2D sGpuBufferF; 6 uniform HIGHP_SAMPLER_FLOAT isampler2D sGpuBufferI; 7 8 ivec2 get_gpu_buffer_uv(HIGHP_FS_ADDRESS int address) { 9 return ivec2(uint(address) % WR_MAX_VERTEX_TEXTURE_WIDTH, 10 uint(address) / WR_MAX_VERTEX_TEXTURE_WIDTH); 11 } 12 13 vec4[2] fetch_from_gpu_buffer_2f_direct(ivec2 uv) { 14 return vec4[2]( 15 TEXEL_FETCH(sGpuBufferF, uv, 0, ivec2(0, 0)), 16 TEXEL_FETCH(sGpuBufferF, uv, 0, ivec2(1, 0)) 17 ); 18 } 19 20 vec4[3] fetch_from_gpu_buffer_3f_direct(ivec2 uv) { 21 return vec4[3]( 22 TEXEL_FETCH(sGpuBufferF, uv, 0, ivec2(0, 0)), 23 TEXEL_FETCH(sGpuBufferF, uv, 0, ivec2(1, 0)), 24 TEXEL_FETCH(sGpuBufferF, uv, 0, ivec2(2, 0)) 25 ); 26 } 27 28 vec4[4] fetch_from_gpu_buffer_4f_direct(ivec2 uv) { 29 return vec4[4]( 30 TEXEL_FETCH(sGpuBufferF, uv, 0, ivec2(0, 0)), 31 TEXEL_FETCH(sGpuBufferF, uv, 0, ivec2(1, 0)), 32 TEXEL_FETCH(sGpuBufferF, uv, 0, ivec2(2, 0)), 33 TEXEL_FETCH(sGpuBufferF, uv, 0, ivec2(3, 0)) 34 ); 35 } 36 37 vec4[5] fetch_from_gpu_buffer_5f_direct(ivec2 uv) { 38 return vec4[5]( 39 TEXEL_FETCH(sGpuBufferF, uv, 0, ivec2(0, 0)), 40 TEXEL_FETCH(sGpuBufferF, uv, 0, ivec2(1, 0)), 41 TEXEL_FETCH(sGpuBufferF, uv, 0, ivec2(2, 0)), 42 TEXEL_FETCH(sGpuBufferF, uv, 0, ivec2(3, 0)), 43 TEXEL_FETCH(sGpuBufferF, uv, 0, ivec2(4, 0)) 44 ); 45 } 46 47 vec4 fetch_from_gpu_buffer_1f(HIGHP_FS_ADDRESS int address) { 48 ivec2 uv = get_gpu_buffer_uv(address); 49 return texelFetch(sGpuBufferF, uv, 0); 50 } 51 52 vec4[2] fetch_from_gpu_buffer_2f(HIGHP_FS_ADDRESS int address) { 53 ivec2 uv = get_gpu_buffer_uv(address); 54 return fetch_from_gpu_buffer_2f_direct(uv); 55 } 56 57 vec4[3] fetch_from_gpu_buffer_3f(HIGHP_FS_ADDRESS int address) { 58 ivec2 uv = get_gpu_buffer_uv(address); 59 return fetch_from_gpu_buffer_3f_direct(uv); 60 } 61 62 vec4[4] fetch_from_gpu_buffer_4f(HIGHP_FS_ADDRESS int address) { 63 ivec2 uv = get_gpu_buffer_uv(address); 64 return fetch_from_gpu_buffer_4f_direct(uv); 65 } 66 67 vec4[5] fetch_from_gpu_buffer_5f(HIGHP_FS_ADDRESS int address) { 68 ivec2 uv = get_gpu_buffer_uv(address); 69 return fetch_from_gpu_buffer_5f_direct(uv); 70 } 71 72 vec4 fetch_from_gpu_buffer_1f_direct(ivec2 uv) { 73 return texelFetch(sGpuBufferF, uv, 0); 74 } 75 76 ivec4 fetch_from_gpu_buffer_1i(HIGHP_FS_ADDRESS int address) { 77 ivec2 uv = get_gpu_buffer_uv(address); 78 return texelFetch(sGpuBufferI, uv, 0); 79 }