1287 lines
42 KiB
C
1287 lines
42 KiB
C
// This file is part of the FidelityFX SDK.
|
|
//
|
|
// Copyright (C) 2024 Advanced Micro Devices, Inc.
|
|
//
|
|
// Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
// of this software and associated documentation files(the "Software"), to deal
|
|
// in the Software without restriction, including without limitation the rights
|
|
// to use, copy, modify, merge, publish, distribute, sublicense, and /or sell
|
|
// copies of the Software, and to permit persons to whom the Software is
|
|
// furnished to do so, subject to the following conditions :
|
|
//
|
|
// The above copyright notice and this permission notice shall be included in
|
|
// all copies or substantial portions of the Software.
|
|
//
|
|
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
|
// THE SOFTWARE.
|
|
|
|
#ifndef FFX_BRIXELIZER_CALLBACKS_GLSL_H
|
|
#define FFX_BRIXELIZER_CALLBACKS_GLSL_H
|
|
|
|
#include "ffx_brixelizer_resources.h"
|
|
#include "ffx_brixelizer_host_gpu_shared.h"
|
|
#include "ffx_brixelizer_host_gpu_shared_private.h"
|
|
|
|
#if defined(FFX_GPU)
|
|
#ifndef FFX_PREFER_WAVE64
|
|
#define FFX_PREFER_WAVE64
|
|
#endif // #ifndef FFX_PREFER_WAVE64
|
|
|
|
#define FFX_BRIXELIZER_SIZEOF_UINT 4
|
|
|
|
// CBVs
|
|
|
|
#if defined BRIXELIZER_BIND_CB_CASCADE_INFO
|
|
layout (set = 0, binding = BRIXELIZER_BIND_CB_CASCADE_INFO, std140) uniform BrixelizerCascadeInfo_t
|
|
{
|
|
FfxBrixelizerCascadeInfo data;
|
|
} cbBrixelizerCascadeInfo;
|
|
#endif
|
|
|
|
#if defined BRIXELIZER_BIND_CB_CONTEXT_INFO
|
|
layout (set = 0, binding = BRIXELIZER_BIND_CB_CONTEXT_INFO, std140) uniform BrixelizerContextInfo_t
|
|
{
|
|
FfxBrixelizerContextInfo data;
|
|
} cbBrixelizerContextInfo;
|
|
#endif
|
|
|
|
#if defined BRIXELIZER_BIND_CB_BUILD_INFO
|
|
layout (set = 0, binding = BRIXELIZER_BIND_CB_BUILD_INFO, std140) uniform BrixelizerBuildInfo_t
|
|
{
|
|
FfxBrixelizerBuildInfo data;
|
|
} cbBrixelizerBuildInfo;
|
|
#endif
|
|
|
|
#if defined BRIXELIZER_BIND_CB_DEBUG_INFO
|
|
layout (set = 0, binding = BRIXELIZER_BIND_CB_DEBUG_INFO, std140) uniform BrixelizerDebugInfo_t
|
|
{
|
|
FfxBrixelizerDebugInfo data;
|
|
} cbBrixelizerDebugInfo;
|
|
#endif
|
|
|
|
// SRVs
|
|
|
|
#if defined BRIXELIZER_BIND_SRV_DEBUG_INSTANCE_ID_BUFFER
|
|
layout (set = 0, binding = BRIXELIZER_BIND_SRV_DEBUG_INSTANCE_ID_BUFFER, std430) readonly buffer BrixelizerDebugInstanceID_t
|
|
{
|
|
FfxUInt32 data[];
|
|
} r_debug_instance_id;
|
|
#endif
|
|
|
|
#if defined BRIXELIZER_BIND_SRV_JOB_BUFFER
|
|
layout (set = 0, binding = BRIXELIZER_BIND_SRV_JOB_BUFFER, std430) readonly buffer BrixelizerJob_t
|
|
{
|
|
FfxBrixelizerBrixelizationJob data[];
|
|
} r_job_buffer;
|
|
#endif
|
|
|
|
#if defined BRIXELIZER_BIND_SRV_JOB_INDEX_BUFFER
|
|
layout (set = 0, binding = BRIXELIZER_BIND_SRV_JOB_INDEX_BUFFER, std430) readonly buffer BrixelizerJobIndex_t
|
|
{
|
|
FfxUInt32 data[];
|
|
} r_job_index_buffer;
|
|
#endif
|
|
|
|
#if defined BRIXELIZER_BIND_SRV_INSTANCE_INFO_BUFFER
|
|
layout (set = 0, binding = BRIXELIZER_BIND_SRV_INSTANCE_INFO_BUFFER, std430) readonly buffer BrixelizerInstanceInfo_t
|
|
{
|
|
FfxBrixelizerInstanceInfo data[];
|
|
} r_instance_info_buffer;
|
|
#endif
|
|
|
|
#if defined BRIXELIZER_BIND_SRV_INSTANCE_TRANSFORM_BUFFER
|
|
layout (set = 0, binding = BRIXELIZER_BIND_SRV_INSTANCE_TRANSFORM_BUFFER, std430) readonly buffer BrixelizerInstanceTransform_t
|
|
{
|
|
FfxFloat32x4 data[];
|
|
} r_instance_transform_buffer;
|
|
#endif
|
|
|
|
#if defined BRIXELIZER_BIND_SRV_VERTEX_BUFFERS
|
|
layout (set = 1, binding = BRIXELIZER_BIND_SRV_VERTEX_BUFFERS, std430) readonly buffer BrixelizerVertexBuffer_t
|
|
{
|
|
FfxUInt32 data[];
|
|
} r_vertex_buffers[FFX_BRIXELIZER_STATIC_CONFIG_MAX_VERTEX_BUFFERS];
|
|
#endif
|
|
|
|
#if defined BRIXELIZER_BIND_SRV_SDF_ATLAS
|
|
layout (set = 0, binding = BRIXELIZER_BIND_SRV_SDF_ATLAS) uniform texture3D r_sdf_atlas;
|
|
#endif
|
|
|
|
// UAVs
|
|
|
|
#if defined BRIXELIZER_BIND_UAV_DEBUG_AABBS
|
|
layout (set = 0, binding = BRIXELIZER_BIND_UAV_DEBUG_AABBS, std430) buffer BrixelizerDebugAABBs_t
|
|
{
|
|
FfxBrixelizerDebugAABB data[];
|
|
} rw_debug_aabbs;
|
|
#endif
|
|
|
|
#if defined BRIXELIZER_BIND_UAV_CASCADE_AABB_TREE
|
|
layout (set = 0, binding = BRIXELIZER_BIND_UAV_CASCADE_AABB_TREE, std430) buffer BrixelizerCascadeAABBTree_t
|
|
{
|
|
FfxUInt32 data[];
|
|
} rw_cascade_aabbtree;
|
|
#endif
|
|
|
|
#if defined BRIXELIZER_BIND_UAV_CASCADE_BRICK_MAP
|
|
layout (set = 0, binding = BRIXELIZER_BIND_UAV_CASCADE_BRICK_MAP, std430) buffer BrixelizerCascadeBrickMap_t
|
|
{
|
|
FfxUInt32 data[];
|
|
} rw_cascade_brick_map;
|
|
#endif
|
|
|
|
#if defined BRIXELIZER_BIND_UAV_SCRATCH_COUNTERS
|
|
layout (set = 0, binding = BRIXELIZER_BIND_UAV_SCRATCH_COUNTERS, std430) buffer BrixelizerScratchCounters_t
|
|
{
|
|
FfxUInt32 data[];
|
|
} rw_scratch_counters;
|
|
#endif
|
|
|
|
#if defined BRIXELIZER_BIND_UAV_SCRATCH_INDEX_SWAP
|
|
layout (set = 0, binding = BRIXELIZER_BIND_UAV_SCRATCH_INDEX_SWAP, std430) buffer BrixelizerScratchIndexSwap_t
|
|
{
|
|
FfxUInt32 data[];
|
|
} rw_scratch_index_swap;
|
|
#endif
|
|
|
|
#if defined BRIXELIZER_BIND_UAV_SCRATCH_VOXEL_ALLOCATION_FAIL_COUNTER
|
|
layout (set = 0, binding = BRIXELIZER_BIND_UAV_SCRATCH_VOXEL_ALLOCATION_FAIL_COUNTER, std430) buffer BrixelizerScratchVoxelAllocationFailCounter_t
|
|
{
|
|
FfxUInt32 data[];
|
|
} rw_scratch_voxel_allocation_fail_counter;
|
|
#endif
|
|
|
|
#if defined BRIXELIZER_BIND_UAV_SCRATCH_BRICKS_STORAGE
|
|
layout (set = 0, binding = BRIXELIZER_BIND_UAV_SCRATCH_BRICKS_STORAGE, std430) buffer BrixelizerScratchBricksStorage_t
|
|
{
|
|
FfxUInt32 data[];
|
|
} rw_scratch_bricks_storage;
|
|
#endif
|
|
|
|
#if defined BRIXELIZER_BIND_UAV_SCRATCH_BRICKS_STORAGE_OFFSETS
|
|
layout (set = 0, binding = BRIXELIZER_BIND_UAV_SCRATCH_BRICKS_STORAGE_OFFSETS, std430) buffer BrixelizerScratchBricksStorageOffsets_t
|
|
{
|
|
FfxUInt32 data[];
|
|
} rw_scratch_bricks_storage_offsets;
|
|
#endif
|
|
|
|
#if defined BRIXELIZER_BIND_UAV_SCRATCH_BRICKS_COMPRESSION_LIST
|
|
layout (set = 0, binding = BRIXELIZER_BIND_UAV_SCRATCH_BRICKS_COMPRESSION_LIST, std430) buffer BrixelizerScratchBricksCompressionList_t
|
|
{
|
|
FfxUInt32 data[];
|
|
} rw_scratch_bricks_compression_list;
|
|
#endif
|
|
|
|
#if defined BRIXELIZER_BIND_UAV_SCRATCH_BRICKS_CLEAR_LIST
|
|
layout (set = 0, binding = BRIXELIZER_BIND_UAV_SCRATCH_BRICKS_CLEAR_LIST, std430) buffer BrixelizerScratchBricksClearList_t
|
|
{
|
|
FfxUInt32 data[];
|
|
} rw_scratch_bricks_clear_list;
|
|
#endif
|
|
|
|
#if defined BRIXELIZER_BIND_UAV_SCRATCH_JOB_COUNTERS
|
|
layout (set = 0, binding = BRIXELIZER_BIND_UAV_SCRATCH_JOB_COUNTERS, std430) buffer BrixelizerScratchJobCounters_t
|
|
{
|
|
FfxUInt32 data[];
|
|
} rw_scratch_job_counters;
|
|
#endif
|
|
|
|
#if defined BRIXELIZER_BIND_UAV_SCRATCH_JOB_COUNTERS_SCAN
|
|
layout (set = 0, binding = BRIXELIZER_BIND_UAV_SCRATCH_JOB_COUNTERS_SCAN, std430) buffer BrixelizerScratchJobCountersScan_t
|
|
{
|
|
FfxUInt32 data[];
|
|
} rw_scratch_job_counters_scan;
|
|
#endif
|
|
|
|
#if defined BRIXELIZER_BIND_UAV_SCRATCH_JOB_GLOBAL_COUNTERS_SCAN
|
|
layout (set = 0, binding = BRIXELIZER_BIND_UAV_SCRATCH_JOB_GLOBAL_COUNTERS_SCAN, std430) buffer BrixelizerScratchJobGlobalCountersScan_t
|
|
{
|
|
FfxUInt32 data[];
|
|
} rw_scratch_job_global_counters_scan;
|
|
#endif
|
|
|
|
#if defined BRIXELIZER_BIND_UAV_SCRATCH_CR1_REFERENCES
|
|
layout (set = 0, binding = BRIXELIZER_BIND_UAV_SCRATCH_CR1_REFERENCES, std430) buffer BrixelizerScratchCR1References_t
|
|
{
|
|
FfxBrixelizerTriangleReference data[];
|
|
} rw_scratch_cr1_references;
|
|
#endif
|
|
|
|
#if defined BRIXELIZER_BIND_UAV_SCRATCH_CR1_COMPACTED_REFERENCES
|
|
layout (set = 0, binding = BRIXELIZER_BIND_UAV_SCRATCH_CR1_COMPACTED_REFERENCES, std430) buffer BrixelizerScratchCR1CompactedReferences_t
|
|
{
|
|
FfxUInt32 data[];
|
|
} rw_scratch_cr1_compacted_references;
|
|
#endif
|
|
|
|
#if defined BRIXELIZER_BIND_UAV_SCRATCH_CR1_REF_COUNTERS
|
|
layout (set = 0, binding = BRIXELIZER_BIND_UAV_SCRATCH_CR1_REF_COUNTERS, std430) buffer BrixelizerScratchCR1RefCounters_t
|
|
{
|
|
FfxUInt32 data[];
|
|
} rw_scratch_cr1_ref_counters;
|
|
#endif
|
|
|
|
#if defined BRIXELIZER_BIND_UAV_SCRATCH_CR1_INSTANCE_REF_COUNTERS
|
|
layout (set = 0, binding = BRIXELIZER_BIND_UAV_SCRATCH_CR1_INSTANCE_REF_COUNTERS, std430) buffer BrixelizerScratchCR1InstanceRefCounters_t
|
|
{
|
|
FfxUInt32 data[];
|
|
} rw_scratch_cr1_instance_ref_counters;
|
|
#endif
|
|
|
|
#if defined BRIXELIZER_BIND_UAV_SCRATCH_CR1_REF_COUNTER_SCAN
|
|
layout (set = 0, binding = BRIXELIZER_BIND_UAV_SCRATCH_CR1_REF_COUNTER_SCAN, std430) buffer BrixelizerScratchCR1RefCounterScan_t
|
|
{
|
|
FfxUInt32 data[];
|
|
} rw_scratch_cr1_ref_counter_scan;
|
|
#endif
|
|
|
|
#if defined BRIXELIZER_BIND_UAV_SCRATCH_CR1_REF_GLOBAL_SCAN
|
|
layout (set = 0, binding = BRIXELIZER_BIND_UAV_SCRATCH_CR1_REF_GLOBAL_SCAN, std430) buffer BrixelizerScratchCR1RefGlobalScan_t
|
|
{
|
|
FfxUInt32 data[];
|
|
} rw_scratch_cr1_ref_global_scan;
|
|
#endif
|
|
|
|
#if defined BRIXELIZER_BIND_UAV_SCRATCH_CR1_STAMP_SCAN
|
|
layout (set = 0, binding = BRIXELIZER_BIND_UAV_SCRATCH_CR1_STAMP_SCAN, std430) buffer BrixelizerScratchCR1StampScan_t
|
|
{
|
|
FfxUInt32 data[];
|
|
} rw_scratch_cr1_stamp_scan;
|
|
#endif
|
|
|
|
#if defined BRIXELIZER_BIND_UAV_SCRATCH_CR1_STAMP_GLOBAL_SCAN
|
|
layout (set = 0, binding = BRIXELIZER_BIND_UAV_SCRATCH_CR1_STAMP_GLOBAL_SCAN, std430) buffer BrixelizerScratchCR1StampGlobalScan_t
|
|
{
|
|
FfxUInt32 data[];
|
|
} rw_scratch_cr1_stamp_global_scan;
|
|
#endif
|
|
|
|
#if defined BRIXELIZER_BIND_UAV_INDIRECT_ARGS
|
|
layout (set = 0, binding = BRIXELIZER_BIND_UAV_INDIRECT_ARGS, std430) buffer BrixelizerIndirectArgs_t
|
|
{
|
|
FfxUInt32 data[];
|
|
} rw_indirect_args_1;
|
|
#endif
|
|
|
|
#if defined BRIXELIZER_BIND_UAV_CONTEXT_BRICKS_VOXEL_MAP
|
|
layout (set = 0, binding = BRIXELIZER_BIND_UAV_CONTEXT_BRICKS_VOXEL_MAP, std430) buffer BrixelizerContextBricksVoxelMap_t
|
|
{
|
|
FfxUInt32 data[];
|
|
} rw_bctx_bricks_voxel_map;
|
|
#endif
|
|
|
|
#if defined BRIXELIZER_BIND_UAV_CONTEXT_BRICKS_AABB
|
|
layout (set = 0, binding = BRIXELIZER_BIND_UAV_CONTEXT_BRICKS_AABB, std430) buffer BrixelizerContextBricksAABB_t
|
|
{
|
|
FfxUInt32 data[];
|
|
} rw_bctx_bricks_aabb;
|
|
#endif
|
|
|
|
#if defined BRIXELIZER_BIND_UAV_CONTEXT_BRICKS_FREE_LIST
|
|
layout (set = 0, binding = BRIXELIZER_BIND_UAV_CONTEXT_BRICKS_FREE_LIST, std430) buffer BrixelizerContextBricksFreeList_t
|
|
{
|
|
FfxUInt32 data[];
|
|
} rw_bctx_bricks_free_list;
|
|
#endif
|
|
|
|
#if defined BRIXELIZER_BIND_UAV_CONTEXT_BRICKS_CLEAR_LIST
|
|
layout (set = 0, binding = BRIXELIZER_BIND_UAV_CONTEXT_BRICKS_CLEAR_LIST, std430) buffer BrixelizerContextBricksClearList_t
|
|
{
|
|
FfxUInt32 data[];
|
|
} rw_bctx_bricks_clear_list;
|
|
#endif
|
|
|
|
#if defined BRIXELIZER_BIND_UAV_CONTEXT_BRICKS_EIKONAL_LIST
|
|
layout (set = 0, binding = BRIXELIZER_BIND_UAV_CONTEXT_BRICKS_EIKONAL_LIST, std430) buffer BrixelizerContextBricksEikonalList_t
|
|
{
|
|
FfxUInt32 data[];
|
|
} rw_bctx_bricks_eikonal_list;
|
|
#endif
|
|
|
|
#if defined BRIXELIZER_BIND_UAV_CONTEXT_BRICKS_MERGE_LIST
|
|
layout (set = 0, binding = BRIXELIZER_BIND_UAV_CONTEXT_BRICKS_MERGE_LIST, std430) buffer BrixelizerContextBricksMergeList_t
|
|
{
|
|
FfxUInt32 data[];
|
|
} rw_bctx_bricks_merge_list;
|
|
#endif
|
|
|
|
#if defined BRIXELIZER_BIND_UAV_CONTEXT_BRICKS_EIKONAL_COUNTERS
|
|
layout (set = 0, binding = BRIXELIZER_BIND_UAV_CONTEXT_BRICKS_EIKONAL_COUNTERS, std430) buffer BrixelizerContextBricksEikonalCounters_t
|
|
{
|
|
FfxUInt32 data[];
|
|
} rw_bctx_bricks_eikonal_counters;
|
|
#endif
|
|
|
|
#if defined BRIXELIZER_BIND_UAV_CONTEXT_COUNTERS
|
|
layout (set = 0, binding = BRIXELIZER_BIND_UAV_CONTEXT_COUNTERS, std430) buffer BrixelizerContextCounters_t
|
|
{
|
|
FfxUInt32 data[];
|
|
} rw_bctx_counters;
|
|
#endif
|
|
|
|
#if defined BRIXELIZER_BIND_UAV_CASCADE_BRICK_MAPS
|
|
layout (set = 0, binding = BRIXELIZER_BIND_UAV_CASCADE_BRICK_MAPS, std430) buffer BrixelizerCascadeBrickMaps_t
|
|
{
|
|
FfxUInt32 data[];
|
|
} rw_cascade_brick_maps[24];
|
|
#endif
|
|
|
|
#if defined BRIXELIZER_BIND_UAV_CASCADE_AABB_TREES
|
|
layout (set = 0, binding = BRIXELIZER_BIND_UAV_CASCADE_AABB_TREES, std430) buffer BrixelizerCascadeAABBTrees_t
|
|
{
|
|
FfxUInt32 data[];
|
|
} rw_cascade_aabbtrees[24];
|
|
#endif
|
|
|
|
#if defined BRIXELIZER_BIND_UAV_SDF_ATLAS
|
|
layout (set = 0, binding = BRIXELIZER_BIND_UAV_SDF_ATLAS, r8) uniform image3D rw_sdf_atlas;
|
|
#endif
|
|
|
|
#if defined BRIXELIZER_BIND_UAV_DEBUG_OUTPUT
|
|
layout (set = 0, binding = BRIXELIZER_BIND_UAV_DEBUG_OUTPUT, rgba16f) uniform image2D rw_debug_output;
|
|
#endif
|
|
|
|
layout (set = 0, binding = 1000) uniform sampler g_wrap_linear_sampler;
|
|
|
|
FfxBrixelizerDebugAABB GetDebugAABB(FfxUInt32 idx);
|
|
void StoreDebugAABB(FfxUInt32 idx, FfxBrixelizerDebugAABB aabb);
|
|
FfxUInt32 GetDebugInstanceID(FfxUInt32 idx);
|
|
FfxBrixelizerCascadeInfo GetCascadeInfo();
|
|
FfxUInt32x3 GetCascadeInfoClipmapOffset();
|
|
FfxUInt32 GetCascadeInfoIndex();
|
|
FfxFloat32x3 GetCascadeInfoGridMin();
|
|
FfxFloat32x3 GetCascadeInfoGridMax();
|
|
FfxFloat32 GetCascadeInfoVoxelSize();
|
|
FfxInt32x3 GetCascadeInfoClipmapInvalidationOffset();
|
|
FfxBrixelizerCascadeInfo GetCascadeInfo(FfxUInt32 idx);
|
|
FfxUInt32 GetContextInfoNumBricks();
|
|
FfxUInt32x3 GetContextInfoCascadeClipmapOffset(FfxUInt32 cascade_index);
|
|
FfxBrixelizerBuildInfo GetBuildInfo();
|
|
FfxUInt32 GetBuildInfoDoInitialization();
|
|
FfxInt32 GetBuildInfoTreeIteration();
|
|
FfxUInt32 GetBuildInfoNumJobs();
|
|
FfxUInt32 GetDebugInfoMaxAABBs();
|
|
FfxFloat32x4x4 GetDebugInfoInvView();
|
|
FfxFloat32x4x4 GetDebugInfoInvProj();
|
|
FfxFloat32 GetDebugInfoPreviewSDFSolveEpsilon();
|
|
FfxUInt32 GetDebugInfoStartCascadeIndex();
|
|
FfxUInt32 GetDebugInfoEndCascadeIndex();
|
|
FfxFloat32 GetDebugInfoTMin();
|
|
FfxFloat32 GetDebugInfoTMax();
|
|
FfxUInt32 GetDebugInfoDebugState();
|
|
FfxBrixelizerBrixelizationJob LoadBrixelizationJob(FfxUInt32 idx);
|
|
FfxUInt32 LoadJobIndex(FfxUInt32 idx);
|
|
FfxBrixelizerInstanceInfo LoadInstanceInfo(FfxUInt32 index);
|
|
FfxFloat32x3x4 LoadInstanceTransform(FfxUInt32 idx);
|
|
FfxUInt32 LoadVertexBufferUInt(FfxUInt32 bufferIdx, FfxUInt32 elementIdx);
|
|
FfxUInt32x2 LoadVertexBufferUInt2(FfxUInt32 bufferIdx, FfxUInt32 elementIdx);
|
|
FfxUInt32x3 LoadVertexBufferUInt3(FfxUInt32 bufferIdx, FfxUInt32 elementIdx);
|
|
FfxFloat32x2 LoadVertexBufferFloat2(FfxUInt32 bufferIdx, FfxUInt32 elementIdx);
|
|
FfxFloat32x3 LoadVertexBufferFloat3(FfxUInt32 bufferIdx, FfxUInt32 elementIdx);
|
|
FfxFloat32x4 LoadVertexBufferFloat4(FfxUInt32 bufferIdx, FfxUInt32 elementIdx);
|
|
FfxFloat32 SampleSDFAtlas(FfxFloat32x3 uvw);
|
|
FfxUInt32 LoadCascadeBrickMap(FfxUInt32 elementIdx);
|
|
void StoreCascadeBrickMap(FfxUInt32 elementIdx, FfxUInt32 value);
|
|
FfxUInt32 LoadCascadeBrickMapArrayUniform(FfxUInt32 bufferIdx, FfxUInt32 elementIdx);
|
|
void StoreCascadeBrickMapArrayUniform(FfxUInt32 bufferIdx, FfxUInt32 elementIdx, FfxUInt32 value);
|
|
FfxUInt32 LoadScratchCounter(FfxUInt32 counter);
|
|
void StoreScratchCounter(FfxUInt32 counter, FfxUInt32 value);
|
|
void IncrementScratchCounter(FfxUInt32 counter, FfxUInt32 value, inout FfxUInt32 originalValue);
|
|
FfxUInt32x2 LoadScratchIndexSwapUInt2(FfxUInt32 elementIdx);
|
|
FfxFloat32x3 LoadScratchIndexSwapFloat3(FfxUInt32 elementIdx);
|
|
void StoreScratchIndexSwapUInt2(FfxUInt32 elementIdx, FfxUInt32x2 value);
|
|
void StoreScratchIndexSwapFloat3(FfxUInt32 elementIdx, FfxFloat32x3 value);
|
|
void GetScratchIndexSwapDimensions(inout FfxUInt32 size);
|
|
FfxUInt32 LoadScratchVoxelAllocationFailCounter(FfxUInt32 elementIdx);
|
|
void StoreScratchVoxelAllocationFailCounter(FfxUInt32 elementIdx, FfxUInt32 value);
|
|
FfxUInt32 LoadScratchBricksStorage(FfxUInt32 elementIdx);
|
|
void StoreScratchBricksStorage(FfxUInt32 elementIdx, FfxUInt32 value);
|
|
void GetScratchBricksStorageDimensions(inout FfxUInt32 size);
|
|
void MinScratchBricksStorage(FfxUInt32 elementIdx, FfxUInt32 value);
|
|
FfxUInt32 LoadScratchBricksStorageOffsets(FfxUInt32 elementIdx);
|
|
void StoreScratchBricksStorageOffsets(FfxUInt32 elementIdx, FfxUInt32 value);
|
|
FfxUInt32 LoadScratchBricksCompressionList(FfxUInt32 elementIdx);
|
|
void StoreScratchBricksCompressionList(FfxUInt32 elementIdx, FfxUInt32 value);
|
|
FfxUInt32 LoadScratchBricksClearList(FfxUInt32 elementIdx);
|
|
void StoreScratchBricksClearList(FfxUInt32 elementIdx, FfxUInt32 value);
|
|
FfxUInt32 LoadScratchJobCounter(FfxUInt32 counterIdx);
|
|
void StoreScratchJobCounter(FfxUInt32 counterIdx, FfxUInt32 value);
|
|
void IncrementScratchJobCounter(FfxUInt32 counterIdx, FfxUInt32 value);
|
|
FfxUInt32 LoadScratchJobCountersScan(FfxUInt32 elementIdx);
|
|
void StoreScratchJobCountersScan(FfxUInt32 elementIdx, FfxUInt32 value);
|
|
FfxUInt32 LoadGlobalJobTriangleCounterScan(FfxUInt32 elementIdx);
|
|
void StoreGlobalJobTriangleCounterScan(FfxUInt32 elementIdx, FfxUInt32 scan);
|
|
FfxBrixelizerTriangleReference LoadScratchCR1Reference(FfxUInt32 elementIdx);
|
|
void StoreScratchCR1Reference(FfxUInt32 elementIdx, FfxBrixelizerTriangleReference ref);
|
|
void GetScratchMaxReferences(inout FfxUInt32 size);
|
|
FfxUInt32 LoadScratchCR1CompactedReferences(FfxUInt32 elementIdx);
|
|
void StoreScratchCR1CompactedReferences(FfxUInt32 elementIdx, FfxUInt32 value);
|
|
FfxUInt32 LoadScratchCR1RefCounter(FfxUInt32 elementIdx);
|
|
void StoreScratchCR1RefCounter(FfxUInt32 elementIdx, FfxUInt32 value);
|
|
void IncrementScratchCR1RefCounter(FfxUInt32 elementIdx, FfxUInt32 value, inout FfxUInt32 originalValue);
|
|
FfxUInt32 LoadScratchCR1RefCounterScan(FfxUInt32 elementIdx);
|
|
void StoreScratchCR1RefCounterScan(FfxUInt32 elementIdx, FfxUInt32 value);
|
|
FfxUInt32 LoadVoxelReferenceGroupSum(FfxUInt32 elementIdx);
|
|
void StoreVoxelReferenceGroupSum(FfxUInt32 elementIdx, FfxUInt32 value);
|
|
FfxUInt32 LoadScratchCR1StampScan(FfxUInt32 elementIdx);
|
|
void StoreScratchCR1StampScan(FfxUInt32 elementIdx, FfxUInt32 value);
|
|
FfxUInt32 LoadStampGroupSum(FfxUInt32 elementIdx);
|
|
void StoreStampGroupSum(FfxUInt32 elementIdx, FfxUInt32 value);
|
|
void StoreIndirectArgs(FfxUInt32 elementIdx, FfxUInt32 value);
|
|
FfxUInt32 LoadBricksVoxelMap(FfxUInt32 elementIdx);
|
|
void StoreBricksVoxelMap(FfxUInt32 elementIdx, FfxUInt32 value);
|
|
FfxUInt32 LoadBricksAABB(FfxUInt32 elementIdx);
|
|
void StoreBricksAABB(FfxUInt32 elementIdx, FfxUInt32 value);
|
|
FfxUInt32 LoadBricksFreeList(FfxUInt32 elementIdx);
|
|
void StoreBricksFreeList(FfxUInt32 elementIdx, FfxUInt32 value);
|
|
FfxUInt32 LoadBricksClearList(FfxUInt32 elementIdx);
|
|
void StoreBricksClearList(FfxUInt32 elementIdx, FfxUInt32 value);
|
|
FfxUInt32 LoadBricksDirtyList(FfxUInt32 elementIdx);
|
|
void StoreBricksDirtyList(FfxUInt32 elementIdx, FfxUInt32 value);
|
|
FfxUInt32 LoadBricksMergeList(FfxUInt32 elementIdx);
|
|
void StoreBricksMergeList(FfxUInt32 elementIdx, FfxUInt32 value);
|
|
FfxUInt32 LoadBricksEikonalCounters(FfxUInt32 elementIdx);
|
|
void StoreBricksEikonalCounters(FfxUInt32 elementIdx, FfxUInt32 value);
|
|
FfxUInt32 LoadContextCounter(FfxUInt32 elementIdx);
|
|
void StoreContextCounter(FfxUInt32 elementIdx, FfxUInt32 value);
|
|
void IncrementContextCounter(FfxUInt32 elementIdx, FfxUInt32 value, inout FfxUInt32 originalValue);
|
|
FfxFloat32x3 LoadCascadeAABBTreeFloat3(FfxUInt32 elementIdx);
|
|
FfxUInt32 LoadCascadeAABBTreeUInt(FfxUInt32 elementIdx);
|
|
void StoreCascadeAABBTreeUInt(FfxUInt32 elementIdx, FfxUInt32 value);
|
|
void StoreCascadeAABBTreeFloat3(FfxUInt32 elementIdx, FfxFloat32x3 value);
|
|
FfxFloat32x3 LoadCascadeAABBTreesFloat3(FfxUInt32 cascadeID, FfxUInt32 elementIdx);
|
|
FfxUInt32 LoadCascadeAABBTreesUInt(FfxUInt32 cascadeID, FfxUInt32 elementIdx);
|
|
FfxFloat32 LoadSDFAtlas(FfxUInt32x3 coord);
|
|
void StoreSDFAtlas(FfxUInt32x3 coord, FfxFloat32 value);
|
|
void StoreDebugOutput(FfxUInt32x2 coord, FfxFloat32x3 outputValue);
|
|
void GetDebugOutputDimensions(inout FfxUInt32 width, inout FfxUInt32 height);
|
|
|
|
#if defined BRIXELIZER_BIND_UAV_DEBUG_AABBS
|
|
FfxBrixelizerDebugAABB GetDebugAABB(FfxUInt32 idx)
|
|
{
|
|
return rw_debug_aabbs.data[idx];
|
|
}
|
|
#endif
|
|
|
|
#if defined BRIXELIZER_BIND_UAV_DEBUG_AABBS
|
|
void StoreDebugAABB(FfxUInt32 idx, FfxBrixelizerDebugAABB aabb)
|
|
{
|
|
rw_debug_aabbs.data[idx] = aabb;
|
|
}
|
|
#endif
|
|
|
|
#if defined BRIXELIZER_BIND_SRV_DEBUG_INSTANCE_ID_BUFFER
|
|
FfxUInt32 GetDebugInstanceID(FfxUInt32 idx)
|
|
{
|
|
return r_debug_instance_id.data[idx];
|
|
}
|
|
#endif
|
|
|
|
#if defined BRIXELIZER_BIND_CB_CASCADE_INFO
|
|
FfxBrixelizerCascadeInfo GetCascadeInfo()
|
|
{
|
|
return cbBrixelizerCascadeInfo.data;
|
|
}
|
|
#endif
|
|
|
|
#if defined BRIXELIZER_BIND_CB_CASCADE_INFO
|
|
FfxUInt32x3 GetCascadeInfoClipmapOffset()
|
|
{
|
|
return cbBrixelizerCascadeInfo.data.clipmap_offset;
|
|
}
|
|
#endif
|
|
|
|
#if defined BRIXELIZER_BIND_CB_CASCADE_INFO
|
|
FfxUInt32 GetCascadeInfoIndex()
|
|
{
|
|
return cbBrixelizerCascadeInfo.data.index;
|
|
}
|
|
#endif
|
|
|
|
#if defined BRIXELIZER_BIND_CB_CASCADE_INFO
|
|
FfxFloat32x3 GetCascadeInfoGridMin()
|
|
{
|
|
return cbBrixelizerCascadeInfo.data.grid_min;
|
|
}
|
|
#endif
|
|
|
|
#if defined BRIXELIZER_BIND_CB_CASCADE_INFO
|
|
FfxFloat32x3 GetCascadeInfoGridMax()
|
|
{
|
|
return cbBrixelizerCascadeInfo.data.grid_max;
|
|
}
|
|
#endif
|
|
|
|
#if defined BRIXELIZER_BIND_CB_CASCADE_INFO
|
|
FfxFloat32 GetCascadeInfoVoxelSize()
|
|
{
|
|
return cbBrixelizerCascadeInfo.data.voxel_size;
|
|
}
|
|
#endif
|
|
|
|
#if defined BRIXELIZER_BIND_CB_CASCADE_INFO
|
|
FfxInt32x3 GetCascadeInfoClipmapInvalidationOffset()
|
|
{
|
|
return cbBrixelizerCascadeInfo.data.clipmap_invalidation_offset;
|
|
}
|
|
#endif
|
|
|
|
#if defined BRIXELIZER_BIND_CB_CONTEXT_INFO
|
|
FfxBrixelizerCascadeInfo GetCascadeInfo(FfxUInt32 idx)
|
|
{
|
|
return cbBrixelizerContextInfo.data.cascades[idx];
|
|
}
|
|
#endif
|
|
|
|
#if defined BRIXELIZER_BIND_CB_CONTEXT_INFO
|
|
FfxUInt32 GetContextInfoNumBricks()
|
|
{
|
|
return cbBrixelizerContextInfo.data.num_bricks;
|
|
}
|
|
#endif
|
|
|
|
#if defined BRIXELIZER_BIND_CB_CONTEXT_INFO
|
|
FfxUInt32x3 GetContextInfoCascadeClipmapOffset(FfxUInt32 cascade_index)
|
|
{
|
|
return cbBrixelizerContextInfo.data.cascades[cascade_index].clipmap_offset;
|
|
}
|
|
#endif
|
|
|
|
#if defined BRIXELIZER_BIND_CB_BUILD_INFO
|
|
FfxBrixelizerBuildInfo GetBuildInfo()
|
|
{
|
|
return cbBrixelizerBuildInfo.data;
|
|
}
|
|
#endif
|
|
|
|
#if defined BRIXELIZER_BIND_CB_BUILD_INFO
|
|
FfxUInt32 GetBuildInfoDoInitialization()
|
|
{
|
|
return cbBrixelizerBuildInfo.data.do_initialization;
|
|
}
|
|
#endif
|
|
|
|
#if defined BRIXELIZER_BIND_CB_BUILD_INFO
|
|
FfxInt32 GetBuildInfoTreeIteration()
|
|
{
|
|
return cbBrixelizerBuildInfo.data.tree_iteration;
|
|
}
|
|
#endif
|
|
|
|
#if defined BRIXELIZER_BIND_CB_BUILD_INFO
|
|
FfxUInt32 GetBuildInfoNumJobs()
|
|
{
|
|
return cbBrixelizerBuildInfo.data.num_jobs;
|
|
}
|
|
#endif
|
|
|
|
#if defined BRIXELIZER_BIND_CB_DEBUG_INFO
|
|
FfxUInt32 GetDebugInfoMaxAABBs()
|
|
{
|
|
return cbBrixelizerDebugInfo.data.max_aabbs;
|
|
}
|
|
#endif
|
|
|
|
#if defined BRIXELIZER_BIND_CB_DEBUG_INFO
|
|
FfxFloat32x4x4 GetDebugInfoInvView()
|
|
{
|
|
return cbBrixelizerDebugInfo.data.inv_view;
|
|
}
|
|
#endif
|
|
|
|
#if defined BRIXELIZER_BIND_CB_DEBUG_INFO
|
|
FfxFloat32x4x4 GetDebugInfoInvProj()
|
|
{
|
|
return cbBrixelizerDebugInfo.data.inv_proj;
|
|
}
|
|
#endif
|
|
|
|
#if defined BRIXELIZER_BIND_CB_DEBUG_INFO
|
|
FfxFloat32 GetDebugInfoPreviewSDFSolveEpsilon()
|
|
{
|
|
return cbBrixelizerDebugInfo.data.preview_sdf_solve_eps;
|
|
}
|
|
#endif
|
|
|
|
#if defined BRIXELIZER_BIND_CB_DEBUG_INFO
|
|
FfxUInt32 GetDebugInfoStartCascadeIndex()
|
|
{
|
|
return cbBrixelizerDebugInfo.data.start_cascade_idx;
|
|
}
|
|
#endif
|
|
|
|
#if defined BRIXELIZER_BIND_CB_DEBUG_INFO
|
|
FfxUInt32 GetDebugInfoEndCascadeIndex()
|
|
{
|
|
return cbBrixelizerDebugInfo.data.end_cascade_idx;
|
|
}
|
|
#endif
|
|
|
|
#if defined BRIXELIZER_BIND_CB_DEBUG_INFO
|
|
FfxFloat32 GetDebugInfoTMin()
|
|
{
|
|
return cbBrixelizerDebugInfo.data.t_min;
|
|
}
|
|
#endif
|
|
|
|
#if defined BRIXELIZER_BIND_CB_DEBUG_INFO
|
|
FfxFloat32 GetDebugInfoTMax()
|
|
{
|
|
return cbBrixelizerDebugInfo.data.t_max;
|
|
}
|
|
#endif
|
|
|
|
#if defined BRIXELIZER_BIND_CB_DEBUG_INFO
|
|
FfxUInt32 GetDebugInfoDebugState()
|
|
{
|
|
return cbBrixelizerDebugInfo.data.debug_state;
|
|
}
|
|
#endif
|
|
|
|
#if defined BRIXELIZER_BIND_SRV_JOB_BUFFER
|
|
FfxBrixelizerBrixelizationJob LoadBrixelizationJob(FfxUInt32 idx)
|
|
{
|
|
return r_job_buffer.data[idx];
|
|
}
|
|
#endif
|
|
|
|
#if defined BRIXELIZER_BIND_SRV_JOB_INDEX_BUFFER
|
|
FfxUInt32 LoadJobIndex(FfxUInt32 idx)
|
|
{
|
|
return r_job_index_buffer.data[idx];
|
|
}
|
|
#endif
|
|
|
|
#if defined BRIXELIZER_BIND_SRV_INSTANCE_INFO_BUFFER
|
|
FfxBrixelizerInstanceInfo LoadInstanceInfo(FfxUInt32 index)
|
|
{
|
|
return r_instance_info_buffer.data[index];
|
|
}
|
|
#endif
|
|
|
|
#if defined BRIXELIZER_BIND_SRV_INSTANCE_TRANSFORM_BUFFER
|
|
FfxFloat32x3x4 LoadInstanceTransform(FfxUInt32 idx)
|
|
{
|
|
// Instance transforms as stored in rows, so load in the 3 rows for this matrix.
|
|
FfxFloat32x4 M0 = r_instance_transform_buffer.data[idx * FfxUInt32(3) + FfxUInt32(0)];
|
|
FfxFloat32x4 M1 = r_instance_transform_buffer.data[idx * FfxUInt32(3) + FfxUInt32(1)];
|
|
FfxFloat32x4 M2 = r_instance_transform_buffer.data[idx * FfxUInt32(3) + FfxUInt32(2)];
|
|
|
|
// A GLSL mat4x3 is constructed using 4xvec3 columns so we need to reshuffle the 3 rows that we loaded into 4 columns.
|
|
|
|
return FfxFloat32x3x4(FfxFloat32x3(M0.x, M1.x, M2.x),
|
|
FfxFloat32x3(M0.y, M1.y, M2.y),
|
|
FfxFloat32x3(M0.z, M1.z, M2.z),
|
|
FfxFloat32x3(M0.w, M1.w, M2.w));
|
|
}
|
|
#endif
|
|
|
|
#if defined BRIXELIZER_BIND_SRV_VERTEX_BUFFERS
|
|
FfxUInt32 LoadVertexBufferUInt(FfxUInt32 bufferIdx, FfxUInt32 elementIdx)
|
|
{
|
|
return r_vertex_buffers[nonuniformEXT(bufferIdx)].data[elementIdx];
|
|
}
|
|
#endif
|
|
|
|
#if defined BRIXELIZER_BIND_SRV_VERTEX_BUFFERS
|
|
FfxUInt32x2 LoadVertexBufferUInt2(FfxUInt32 bufferIdx, FfxUInt32 elementIdx)
|
|
{
|
|
return FfxUInt32x2(r_vertex_buffers[nonuniformEXT(bufferIdx)].data[elementIdx + 0],
|
|
r_vertex_buffers[nonuniformEXT(bufferIdx)].data[elementIdx + 1]);
|
|
}
|
|
#endif
|
|
|
|
#if defined BRIXELIZER_BIND_SRV_VERTEX_BUFFERS
|
|
FfxUInt32x3 LoadVertexBufferUInt3(FfxUInt32 bufferIdx, FfxUInt32 elementIdx)
|
|
{
|
|
return FfxUInt32x3(r_vertex_buffers[nonuniformEXT(bufferIdx)].data[elementIdx + 0],
|
|
r_vertex_buffers[nonuniformEXT(bufferIdx)].data[elementIdx + 1],
|
|
r_vertex_buffers[nonuniformEXT(bufferIdx)].data[elementIdx + 2]);
|
|
}
|
|
#endif
|
|
|
|
#if defined BRIXELIZER_BIND_SRV_VERTEX_BUFFERS
|
|
FfxFloat32x2 LoadVertexBufferFloat2(FfxUInt32 bufferIdx, FfxUInt32 elementIdx)
|
|
{
|
|
return FfxFloat32x2(uintBitsToFloat(r_vertex_buffers[nonuniformEXT(bufferIdx)].data[elementIdx + 0]),
|
|
uintBitsToFloat(r_vertex_buffers[nonuniformEXT(bufferIdx)].data[elementIdx + 1]));
|
|
}
|
|
#endif
|
|
|
|
#if defined BRIXELIZER_BIND_SRV_VERTEX_BUFFERS
|
|
FfxFloat32x3 LoadVertexBufferFloat3(FfxUInt32 bufferIdx, FfxUInt32 elementIdx)
|
|
{
|
|
return FfxFloat32x3(uintBitsToFloat(r_vertex_buffers[nonuniformEXT(bufferIdx)].data[elementIdx + 0]),
|
|
uintBitsToFloat(r_vertex_buffers[nonuniformEXT(bufferIdx)].data[elementIdx + 1]),
|
|
uintBitsToFloat(r_vertex_buffers[nonuniformEXT(bufferIdx)].data[elementIdx + 2]));
|
|
}
|
|
#endif
|
|
|
|
#if defined BRIXELIZER_BIND_SRV_VERTEX_BUFFERS
|
|
FfxFloat32x4 LoadVertexBufferFloat4(FfxUInt32 bufferIdx, FfxUInt32 elementIdx)
|
|
{
|
|
return FfxFloat32x4(uintBitsToFloat(r_vertex_buffers[nonuniformEXT(bufferIdx)].data[elementIdx + 0]),
|
|
uintBitsToFloat(r_vertex_buffers[nonuniformEXT(bufferIdx)].data[elementIdx + 1]),
|
|
uintBitsToFloat(r_vertex_buffers[nonuniformEXT(bufferIdx)].data[elementIdx + 2]),
|
|
uintBitsToFloat(r_vertex_buffers[nonuniformEXT(bufferIdx)].data[elementIdx + 3]));
|
|
}
|
|
#endif
|
|
|
|
#if defined(BRIXELIZER_BIND_SRV_SDF_ATLAS)
|
|
FfxFloat32 SampleSDFAtlas(FfxFloat32x3 uvw)
|
|
{
|
|
return textureLod(sampler3D(r_sdf_atlas, g_wrap_linear_sampler), uvw, FfxFloat32(0.0f)).r;
|
|
}
|
|
#endif
|
|
|
|
#if defined BRIXELIZER_BIND_UAV_CASCADE_BRICK_MAP
|
|
FfxUInt32 LoadCascadeBrickMap(FfxUInt32 elementIdx)
|
|
{
|
|
return rw_cascade_brick_map.data[elementIdx];
|
|
}
|
|
#endif
|
|
|
|
#if defined BRIXELIZER_BIND_UAV_CASCADE_BRICK_MAP
|
|
void StoreCascadeBrickMap(FfxUInt32 elementIdx, FfxUInt32 value)
|
|
{
|
|
rw_cascade_brick_map.data[elementIdx] = value;
|
|
}
|
|
#endif
|
|
|
|
#if defined BRIXELIZER_BIND_UAV_CASCADE_BRICK_MAPS
|
|
FfxUInt32 LoadCascadeBrickMapArrayUniform(FfxUInt32 bufferIdx, FfxUInt32 elementIdx)
|
|
{
|
|
return rw_cascade_brick_maps[bufferIdx].data[elementIdx];
|
|
}
|
|
#endif
|
|
|
|
#if defined BRIXELIZER_BIND_UAV_CASCADE_BRICK_MAPS
|
|
void StoreCascadeBrickMapArrayUniform(FfxUInt32 bufferIdx, FfxUInt32 elementIdx, FfxUInt32 value)
|
|
{
|
|
rw_cascade_brick_maps[bufferIdx].data[elementIdx] = value;
|
|
}
|
|
#endif
|
|
|
|
#if defined BRIXELIZER_BIND_UAV_SCRATCH_COUNTERS
|
|
FfxUInt32 LoadScratchCounter(FfxUInt32 counter)
|
|
{
|
|
return rw_scratch_counters.data[counter];
|
|
}
|
|
#endif
|
|
|
|
#if defined BRIXELIZER_BIND_UAV_SCRATCH_COUNTERS
|
|
void StoreScratchCounter(FfxUInt32 counter, FfxUInt32 value)
|
|
{
|
|
rw_scratch_counters.data[counter] = value;
|
|
}
|
|
#endif
|
|
|
|
#if defined BRIXELIZER_BIND_UAV_SCRATCH_COUNTERS
|
|
void IncrementScratchCounter(FfxUInt32 counter, FfxUInt32 value, inout FfxUInt32 originalValue)
|
|
{
|
|
originalValue = atomicAdd(rw_scratch_counters.data[counter], value);
|
|
}
|
|
#endif
|
|
|
|
#if defined BRIXELIZER_BIND_UAV_SCRATCH_INDEX_SWAP
|
|
FfxUInt32x2 LoadScratchIndexSwapUInt2(FfxUInt32 elementIdx)
|
|
{
|
|
return FfxUInt32x2(rw_scratch_index_swap.data[elementIdx + 0],
|
|
rw_scratch_index_swap.data[elementIdx + 1]);
|
|
}
|
|
#endif
|
|
|
|
#if defined BRIXELIZER_BIND_UAV_SCRATCH_INDEX_SWAP
|
|
FfxFloat32x3 LoadScratchIndexSwapFloat3(FfxUInt32 elementIdx)
|
|
{
|
|
return FfxFloat32x3(uintBitsToFloat(rw_scratch_index_swap.data[elementIdx + 0]),
|
|
uintBitsToFloat(rw_scratch_index_swap.data[elementIdx + 1]),
|
|
uintBitsToFloat(rw_scratch_index_swap.data[elementIdx + 2]));
|
|
}
|
|
#endif
|
|
|
|
#if defined BRIXELIZER_BIND_UAV_SCRATCH_INDEX_SWAP
|
|
void StoreScratchIndexSwapUInt2(FfxUInt32 elementIdx, FfxUInt32x2 value)
|
|
{
|
|
rw_scratch_index_swap.data[elementIdx + 0] = value.x;
|
|
rw_scratch_index_swap.data[elementIdx + 1] = value.y;
|
|
}
|
|
#endif
|
|
|
|
#if defined BRIXELIZER_BIND_UAV_SCRATCH_INDEX_SWAP
|
|
void StoreScratchIndexSwapFloat3(FfxUInt32 elementIdx, FfxFloat32x3 value)
|
|
{
|
|
rw_scratch_index_swap.data[elementIdx + 0] = floatBitsToUint(value.x);
|
|
rw_scratch_index_swap.data[elementIdx + 1] = floatBitsToUint(value.y);
|
|
rw_scratch_index_swap.data[elementIdx + 2] = floatBitsToUint(value.z);
|
|
}
|
|
#endif
|
|
|
|
#if defined BRIXELIZER_BIND_UAV_SCRATCH_INDEX_SWAP
|
|
void GetScratchIndexSwapDimensions(inout FfxUInt32 size)
|
|
{
|
|
FfxUInt32 numStructs = rw_scratch_index_swap.data.length();
|
|
FfxUInt32 stride = 4;
|
|
size = numStructs * stride;
|
|
}
|
|
#endif
|
|
|
|
#if defined BRIXELIZER_BIND_UAV_SCRATCH_VOXEL_ALLOCATION_FAIL_COUNTER
|
|
FfxUInt32 LoadScratchVoxelAllocationFailCounter(FfxUInt32 elementIdx)
|
|
{
|
|
return rw_scratch_voxel_allocation_fail_counter.data[elementIdx];
|
|
}
|
|
#endif
|
|
|
|
#if defined BRIXELIZER_BIND_UAV_SCRATCH_VOXEL_ALLOCATION_FAIL_COUNTER
|
|
void StoreScratchVoxelAllocationFailCounter(FfxUInt32 elementIdx, FfxUInt32 value)
|
|
{
|
|
rw_scratch_voxel_allocation_fail_counter.data[elementIdx] = value;
|
|
}
|
|
#endif
|
|
|
|
#if defined BRIXELIZER_BIND_UAV_SCRATCH_BRICKS_STORAGE
|
|
FfxUInt32 LoadScratchBricksStorage(FfxUInt32 elementIdx)
|
|
{
|
|
return rw_scratch_bricks_storage.data[elementIdx];
|
|
}
|
|
#endif
|
|
|
|
#if defined BRIXELIZER_BIND_UAV_SCRATCH_BRICKS_STORAGE
|
|
void StoreScratchBricksStorage(FfxUInt32 elementIdx, FfxUInt32 value)
|
|
{
|
|
rw_scratch_bricks_storage.data[elementIdx] = value;
|
|
}
|
|
#endif
|
|
|
|
#if defined BRIXELIZER_BIND_UAV_SCRATCH_BRICKS_STORAGE
|
|
void GetScratchBricksStorageDimensions(inout FfxUInt32 size)
|
|
{
|
|
FfxUInt32 numStructs = rw_scratch_bricks_storage.data.length();
|
|
FfxUInt32 stride = 4;
|
|
size = numStructs * stride;
|
|
}
|
|
#endif
|
|
|
|
#if defined BRIXELIZER_BIND_UAV_SCRATCH_BRICKS_STORAGE
|
|
void MinScratchBricksStorage(FfxUInt32 elementIdx, FfxUInt32 value)
|
|
{
|
|
atomicMin(rw_scratch_bricks_storage.data[elementIdx], value);
|
|
}
|
|
#endif
|
|
|
|
#if defined BRIXELIZER_BIND_UAV_SCRATCH_BRICKS_STORAGE_OFFSETS
|
|
FfxUInt32 LoadScratchBricksStorageOffsets(FfxUInt32 elementIdx)
|
|
{
|
|
return rw_scratch_bricks_storage_offsets.data[elementIdx];
|
|
}
|
|
#endif
|
|
|
|
#if defined BRIXELIZER_BIND_UAV_SCRATCH_BRICKS_STORAGE_OFFSETS
|
|
void StoreScratchBricksStorageOffsets(FfxUInt32 elementIdx, FfxUInt32 value)
|
|
{
|
|
rw_scratch_bricks_storage_offsets.data[elementIdx] = value;
|
|
}
|
|
#endif
|
|
|
|
#if defined BRIXELIZER_BIND_UAV_SCRATCH_BRICKS_COMPRESSION_LIST
|
|
FfxUInt32 LoadScratchBricksCompressionList(FfxUInt32 elementIdx)
|
|
{
|
|
return rw_scratch_bricks_compression_list.data[elementIdx];
|
|
}
|
|
#endif
|
|
|
|
#if defined BRIXELIZER_BIND_UAV_SCRATCH_BRICKS_COMPRESSION_LIST
|
|
void StoreScratchBricksCompressionList(FfxUInt32 elementIdx, FfxUInt32 value)
|
|
{
|
|
rw_scratch_bricks_compression_list.data[elementIdx] = value;
|
|
}
|
|
#endif
|
|
|
|
#if defined BRIXELIZER_BIND_UAV_SCRATCH_BRICKS_CLEAR_LIST
|
|
FfxUInt32 LoadScratchBricksClearList(FfxUInt32 elementIdx)
|
|
{
|
|
return rw_scratch_bricks_clear_list.data[elementIdx];
|
|
}
|
|
#endif
|
|
|
|
#if defined BRIXELIZER_BIND_UAV_SCRATCH_BRICKS_CLEAR_LIST
|
|
void StoreScratchBricksClearList(FfxUInt32 elementIdx, FfxUInt32 value)
|
|
{
|
|
rw_scratch_bricks_clear_list.data[elementIdx] = value;
|
|
}
|
|
#endif
|
|
|
|
#if defined BRIXELIZER_BIND_UAV_SCRATCH_JOB_COUNTERS
|
|
FfxUInt32 LoadScratchJobCounter(FfxUInt32 counterIdx)
|
|
{
|
|
return rw_scratch_job_counters.data[counterIdx];
|
|
}
|
|
#endif
|
|
|
|
#if defined BRIXELIZER_BIND_UAV_SCRATCH_JOB_COUNTERS
|
|
void StoreScratchJobCounter(FfxUInt32 counterIdx, FfxUInt32 value)
|
|
{
|
|
rw_scratch_job_counters.data[counterIdx] = value;
|
|
}
|
|
#endif
|
|
|
|
#if defined BRIXELIZER_BIND_UAV_SCRATCH_JOB_COUNTERS
|
|
void IncrementScratchJobCounter(FfxUInt32 counterIdx, FfxUInt32 value)
|
|
{
|
|
atomicAdd(rw_scratch_job_counters.data[counterIdx], value);
|
|
}
|
|
#endif
|
|
|
|
#if defined BRIXELIZER_BIND_UAV_SCRATCH_JOB_COUNTERS_SCAN
|
|
FfxUInt32 LoadScratchJobCountersScan(FfxUInt32 elementIdx)
|
|
{
|
|
return rw_scratch_job_counters_scan.data[elementIdx];
|
|
}
|
|
#endif
|
|
|
|
#if defined BRIXELIZER_BIND_UAV_SCRATCH_JOB_COUNTERS_SCAN
|
|
void StoreScratchJobCountersScan(FfxUInt32 elementIdx, FfxUInt32 value)
|
|
{
|
|
rw_scratch_job_counters_scan.data[elementIdx] = value;
|
|
}
|
|
#endif
|
|
|
|
#if defined BRIXELIZER_BIND_UAV_SCRATCH_JOB_GLOBAL_COUNTERS_SCAN
|
|
FfxUInt32 LoadGlobalJobTriangleCounterScan(FfxUInt32 elementIdx)
|
|
{
|
|
return rw_scratch_job_global_counters_scan.data[elementIdx];
|
|
}
|
|
#endif
|
|
|
|
#if defined BRIXELIZER_BIND_UAV_SCRATCH_JOB_GLOBAL_COUNTERS_SCAN
|
|
void StoreGlobalJobTriangleCounterScan(FfxUInt32 elementIdx, FfxUInt32 scan)
|
|
{
|
|
rw_scratch_job_global_counters_scan.data[elementIdx] = scan;
|
|
}
|
|
#endif
|
|
|
|
#if defined BRIXELIZER_BIND_UAV_SCRATCH_CR1_REFERENCES
|
|
FfxBrixelizerTriangleReference LoadScratchCR1Reference(FfxUInt32 elementIdx)
|
|
{
|
|
return rw_scratch_cr1_references.data[elementIdx];
|
|
}
|
|
#endif
|
|
|
|
#if defined BRIXELIZER_BIND_UAV_SCRATCH_CR1_REFERENCES
|
|
void StoreScratchCR1Reference(FfxUInt32 elementIdx, FfxBrixelizerTriangleReference ref)
|
|
{
|
|
rw_scratch_cr1_references.data[elementIdx] = ref;
|
|
}
|
|
#endif
|
|
|
|
#if defined BRIXELIZER_BIND_UAV_SCRATCH_CR1_REFERENCES
|
|
void GetScratchMaxReferences(inout FfxUInt32 size)
|
|
{
|
|
size = rw_scratch_cr1_references.data.length();
|
|
}
|
|
#endif
|
|
|
|
#if defined BRIXELIZER_BIND_UAV_SCRATCH_CR1_COMPACTED_REFERENCES
|
|
FfxUInt32 LoadScratchCR1CompactedReferences(FfxUInt32 elementIdx)
|
|
{
|
|
return rw_scratch_cr1_compacted_references.data[elementIdx];
|
|
}
|
|
#endif
|
|
|
|
#if defined BRIXELIZER_BIND_UAV_SCRATCH_CR1_COMPACTED_REFERENCES
|
|
void StoreScratchCR1CompactedReferences(FfxUInt32 elementIdx, FfxUInt32 value)
|
|
{
|
|
rw_scratch_cr1_compacted_references.data[elementIdx] = value;
|
|
}
|
|
#endif
|
|
|
|
#if defined BRIXELIZER_BIND_UAV_SCRATCH_CR1_REF_COUNTERS
|
|
FfxUInt32 LoadScratchCR1RefCounter(FfxUInt32 elementIdx)
|
|
{
|
|
return rw_scratch_cr1_ref_counters.data[elementIdx];
|
|
}
|
|
#endif
|
|
|
|
#if defined BRIXELIZER_BIND_UAV_SCRATCH_CR1_REF_COUNTERS
|
|
void StoreScratchCR1RefCounter(FfxUInt32 elementIdx, FfxUInt32 value)
|
|
{
|
|
rw_scratch_cr1_ref_counters.data[elementIdx] = value;
|
|
}
|
|
#endif
|
|
|
|
#if defined BRIXELIZER_BIND_UAV_SCRATCH_CR1_REF_COUNTERS
|
|
void IncrementScratchCR1RefCounter(FfxUInt32 elementIdx, FfxUInt32 value, inout FfxUInt32 originalValue)
|
|
{
|
|
originalValue = atomicAdd(rw_scratch_cr1_ref_counters.data[elementIdx], value);
|
|
}
|
|
#endif
|
|
|
|
#if defined BRIXELIZER_BIND_UAV_SCRATCH_CR1_REF_COUNTER_SCAN
|
|
FfxUInt32 LoadScratchCR1RefCounterScan(FfxUInt32 elementIdx)
|
|
{
|
|
return rw_scratch_cr1_ref_counter_scan.data[elementIdx];
|
|
}
|
|
#endif
|
|
|
|
#if defined BRIXELIZER_BIND_UAV_SCRATCH_CR1_REF_COUNTER_SCAN
|
|
void StoreScratchCR1RefCounterScan(FfxUInt32 elementIdx, FfxUInt32 value)
|
|
{
|
|
rw_scratch_cr1_ref_counter_scan.data[elementIdx] = value;
|
|
}
|
|
#endif
|
|
|
|
#if defined BRIXELIZER_BIND_UAV_SCRATCH_CR1_REF_GLOBAL_SCAN
|
|
FfxUInt32 LoadVoxelReferenceGroupSum(FfxUInt32 elementIdx)
|
|
{
|
|
return rw_scratch_cr1_ref_global_scan.data[elementIdx];
|
|
}
|
|
#endif
|
|
|
|
#if defined BRIXELIZER_BIND_UAV_SCRATCH_CR1_REF_GLOBAL_SCAN
|
|
void StoreVoxelReferenceGroupSum(FfxUInt32 elementIdx, FfxUInt32 value)
|
|
{
|
|
rw_scratch_cr1_ref_global_scan.data[elementIdx] = value;
|
|
}
|
|
#endif
|
|
|
|
#if defined BRIXELIZER_BIND_UAV_SCRATCH_CR1_STAMP_SCAN
|
|
FfxUInt32 LoadScratchCR1StampScan(FfxUInt32 elementIdx)
|
|
{
|
|
return rw_scratch_cr1_stamp_scan.data[elementIdx];
|
|
}
|
|
#endif
|
|
|
|
#if defined BRIXELIZER_BIND_UAV_SCRATCH_CR1_STAMP_SCAN
|
|
void StoreScratchCR1StampScan(FfxUInt32 elementIdx, FfxUInt32 value)
|
|
{
|
|
rw_scratch_cr1_stamp_scan.data[elementIdx] = value;
|
|
}
|
|
#endif
|
|
|
|
#if defined BRIXELIZER_BIND_UAV_SCRATCH_CR1_STAMP_GLOBAL_SCAN
|
|
FfxUInt32 LoadStampGroupSum(FfxUInt32 elementIdx)
|
|
{
|
|
return rw_scratch_cr1_stamp_global_scan.data[elementIdx];
|
|
}
|
|
#endif
|
|
|
|
#if defined BRIXELIZER_BIND_UAV_SCRATCH_CR1_STAMP_GLOBAL_SCAN
|
|
void StoreStampGroupSum(FfxUInt32 elementIdx, FfxUInt32 value)
|
|
{
|
|
rw_scratch_cr1_stamp_global_scan.data[elementIdx] = value;
|
|
}
|
|
#endif
|
|
|
|
#if defined BRIXELIZER_BIND_UAV_INDIRECT_ARGS
|
|
void StoreIndirectArgs(FfxUInt32 elementIdx, FfxUInt32 value)
|
|
{
|
|
rw_indirect_args_1.data[elementIdx] = value;
|
|
}
|
|
#endif
|
|
|
|
#if defined BRIXELIZER_BIND_UAV_CONTEXT_BRICKS_VOXEL_MAP
|
|
FfxUInt32 LoadBricksVoxelMap(FfxUInt32 elementIdx)
|
|
{
|
|
return rw_bctx_bricks_voxel_map.data[elementIdx];
|
|
}
|
|
#endif
|
|
|
|
#if defined BRIXELIZER_BIND_UAV_CONTEXT_BRICKS_VOXEL_MAP
|
|
void StoreBricksVoxelMap(FfxUInt32 elementIdx, FfxUInt32 value)
|
|
{
|
|
rw_bctx_bricks_voxel_map.data[elementIdx] = value;
|
|
}
|
|
#endif
|
|
|
|
#if defined BRIXELIZER_BIND_UAV_CONTEXT_BRICKS_AABB
|
|
FfxUInt32 LoadBricksAABB(FfxUInt32 elementIdx)
|
|
{
|
|
return rw_bctx_bricks_aabb.data[elementIdx];
|
|
}
|
|
#endif
|
|
|
|
#if defined BRIXELIZER_BIND_UAV_CONTEXT_BRICKS_AABB
|
|
void StoreBricksAABB(FfxUInt32 elementIdx, FfxUInt32 value)
|
|
{
|
|
rw_bctx_bricks_aabb.data[elementIdx] = value;
|
|
}
|
|
#endif
|
|
|
|
#if defined BRIXELIZER_BIND_UAV_CONTEXT_BRICKS_FREE_LIST
|
|
FfxUInt32 LoadBricksFreeList(FfxUInt32 elementIdx)
|
|
{
|
|
return rw_bctx_bricks_free_list.data[elementIdx];
|
|
}
|
|
#endif
|
|
|
|
#if defined BRIXELIZER_BIND_UAV_CONTEXT_BRICKS_FREE_LIST
|
|
void StoreBricksFreeList(FfxUInt32 elementIdx, FfxUInt32 value)
|
|
{
|
|
rw_bctx_bricks_free_list.data[elementIdx] = value;
|
|
}
|
|
#endif
|
|
|
|
#if defined BRIXELIZER_BIND_UAV_CONTEXT_BRICKS_CLEAR_LIST
|
|
FfxUInt32 LoadBricksClearList(FfxUInt32 elementIdx)
|
|
{
|
|
return rw_bctx_bricks_clear_list.data[elementIdx];
|
|
}
|
|
#endif
|
|
|
|
#if defined BRIXELIZER_BIND_UAV_CONTEXT_BRICKS_CLEAR_LIST
|
|
void StoreBricksClearList(FfxUInt32 elementIdx, FfxUInt32 value)
|
|
{
|
|
rw_bctx_bricks_clear_list.data[elementIdx] = value;
|
|
}
|
|
#endif
|
|
|
|
#if defined BRIXELIZER_BIND_UAV_CONTEXT_BRICKS_EIKONAL_LIST
|
|
FfxUInt32 LoadBricksDirtyList(FfxUInt32 elementIdx)
|
|
{
|
|
return rw_bctx_bricks_eikonal_list.data[elementIdx];
|
|
}
|
|
#endif
|
|
|
|
#if defined BRIXELIZER_BIND_UAV_CONTEXT_BRICKS_EIKONAL_LIST
|
|
void StoreBricksDirtyList(FfxUInt32 elementIdx, FfxUInt32 value)
|
|
{
|
|
rw_bctx_bricks_eikonal_list.data[elementIdx] = value;
|
|
}
|
|
#endif
|
|
|
|
#if defined BRIXELIZER_BIND_UAV_CONTEXT_BRICKS_MERGE_LIST
|
|
FfxUInt32 LoadBricksMergeList(FfxUInt32 elementIdx)
|
|
{
|
|
return rw_bctx_bricks_merge_list.data[elementIdx];
|
|
}
|
|
#endif
|
|
|
|
#if defined BRIXELIZER_BIND_UAV_CONTEXT_BRICKS_MERGE_LIST
|
|
void StoreBricksMergeList(FfxUInt32 elementIdx, FfxUInt32 value)
|
|
{
|
|
rw_bctx_bricks_merge_list.data[elementIdx] = value;
|
|
}
|
|
#endif
|
|
|
|
#if defined BRIXELIZER_BIND_UAV_CONTEXT_BRICKS_EIKONAL_COUNTERS
|
|
FfxUInt32 LoadBricksEikonalCounters(FfxUInt32 elementIdx)
|
|
{
|
|
return rw_bctx_bricks_eikonal_counters.data[elementIdx & FFX_BRIXELIZER_BRICK_ID_MASK];
|
|
}
|
|
#endif
|
|
|
|
#if defined BRIXELIZER_BIND_UAV_CONTEXT_BRICKS_EIKONAL_COUNTERS
|
|
void StoreBricksEikonalCounters(FfxUInt32 elementIdx, FfxUInt32 value)
|
|
{
|
|
rw_bctx_bricks_eikonal_counters.data[elementIdx & FFX_BRIXELIZER_BRICK_ID_MASK] = value;
|
|
}
|
|
#endif
|
|
|
|
#if defined BRIXELIZER_BIND_UAV_CONTEXT_COUNTERS
|
|
FfxUInt32 LoadContextCounter(FfxUInt32 elementIdx)
|
|
{
|
|
return rw_bctx_counters.data[elementIdx];
|
|
}
|
|
#endif
|
|
|
|
#if defined BRIXELIZER_BIND_UAV_CONTEXT_COUNTERS
|
|
void StoreContextCounter(FfxUInt32 elementIdx, FfxUInt32 value)
|
|
{
|
|
rw_bctx_counters.data[elementIdx] = value;
|
|
}
|
|
#endif
|
|
|
|
#if defined BRIXELIZER_BIND_UAV_CONTEXT_COUNTERS
|
|
void IncrementContextCounter(FfxUInt32 elementIdx, FfxUInt32 value, inout FfxUInt32 originalValue)
|
|
{
|
|
originalValue = atomicAdd(rw_bctx_counters.data[elementIdx], value);
|
|
}
|
|
#endif
|
|
|
|
#if defined BRIXELIZER_BIND_UAV_CASCADE_AABB_TREE
|
|
FfxFloat32x3 LoadCascadeAABBTreeFloat3(FfxUInt32 elementIdx)
|
|
{
|
|
return FfxFloat32x3(uintBitsToFloat(rw_cascade_aabbtree.data[elementIdx + 0]),
|
|
uintBitsToFloat(rw_cascade_aabbtree.data[elementIdx + 1]),
|
|
uintBitsToFloat(rw_cascade_aabbtree.data[elementIdx + 2]));
|
|
}
|
|
#endif
|
|
|
|
#if defined BRIXELIZER_BIND_UAV_CASCADE_AABB_TREE
|
|
FfxUInt32 LoadCascadeAABBTreeUInt(FfxUInt32 elementIdx)
|
|
{
|
|
return rw_cascade_aabbtree.data[elementIdx];
|
|
}
|
|
#endif
|
|
|
|
#if defined BRIXELIZER_BIND_UAV_CASCADE_AABB_TREE
|
|
void StoreCascadeAABBTreeUInt(FfxUInt32 elementIdx, FfxUInt32 value)
|
|
{
|
|
rw_cascade_aabbtree.data[elementIdx] = value;
|
|
}
|
|
#endif
|
|
|
|
#if defined BRIXELIZER_BIND_UAV_CASCADE_AABB_TREE
|
|
void StoreCascadeAABBTreeFloat3(FfxUInt32 elementIdx, FfxFloat32x3 value)
|
|
{
|
|
rw_cascade_aabbtree.data[elementIdx + 0] = floatBitsToUint(value.x);
|
|
rw_cascade_aabbtree.data[elementIdx + 1] = floatBitsToUint(value.y);
|
|
rw_cascade_aabbtree.data[elementIdx + 2] = floatBitsToUint(value.z);
|
|
}
|
|
#endif
|
|
|
|
#if defined BRIXELIZER_BIND_UAV_CASCADE_AABB_TREES
|
|
FfxFloat32x3 LoadCascadeAABBTreesFloat3(FfxUInt32 cascadeID, FfxUInt32 elementIdx)
|
|
{
|
|
return FfxFloat32x3(uintBitsToFloat(rw_cascade_aabbtrees[cascadeID].data[elementIdx + 0]),
|
|
uintBitsToFloat(rw_cascade_aabbtrees[cascadeID].data[elementIdx + 1]),
|
|
uintBitsToFloat(rw_cascade_aabbtrees[cascadeID].data[elementIdx + 2]));
|
|
}
|
|
#endif
|
|
|
|
#if defined BRIXELIZER_BIND_UAV_CASCADE_AABB_TREES
|
|
FfxUInt32 LoadCascadeAABBTreesUInt(FfxUInt32 cascadeID, FfxUInt32 elementIdx)
|
|
{
|
|
return rw_cascade_aabbtrees[cascadeID].data[elementIdx];
|
|
}
|
|
#endif
|
|
|
|
#if defined BRIXELIZER_BIND_UAV_SDF_ATLAS
|
|
FfxFloat32 LoadSDFAtlas(FfxUInt32x3 coord)
|
|
{
|
|
return imageLoad(rw_sdf_atlas, FfxInt32x3(coord)).x;
|
|
}
|
|
#endif
|
|
|
|
#if defined BRIXELIZER_BIND_UAV_SDF_ATLAS
|
|
void StoreSDFAtlas(FfxUInt32x3 coord, FfxFloat32 value)
|
|
{
|
|
imageStore(rw_sdf_atlas, FfxInt32x3(coord), FfxFloat32x4(value, 0.0f, 0.0f, 0.0f));
|
|
}
|
|
#endif
|
|
|
|
#if defined BRIXELIZER_BIND_UAV_DEBUG_OUTPUT
|
|
void StoreDebugOutput(FfxUInt32x2 coord, FfxFloat32x3 outputValue)
|
|
{
|
|
imageStore(rw_debug_output, FfxInt32x2(coord), FfxFloat32x4(outputValue, 1.0f));
|
|
}
|
|
#endif
|
|
|
|
#if defined BRIXELIZER_BIND_UAV_DEBUG_OUTPUT
|
|
void GetDebugOutputDimensions(inout FfxUInt32 width, inout FfxUInt32 height)
|
|
{
|
|
FfxInt32x2 size = imageSize(rw_debug_output);
|
|
width = FfxUInt32(size.x);
|
|
height = FfxUInt32(size.y);
|
|
}
|
|
#endif
|
|
|
|
#endif // #if defined(FFX_GPU)
|
|
|
|
#endif // FFX_BRIXELIZER_CALLBACKS_GLSL_H
|