Adaug proiectul Unity

This commit is contained in:
2026-11-01 23:39:55 +02:00
parent cb14d9d37d
commit 863eac8f2c
23463 changed files with 5412601 additions and 0 deletions
@@ -0,0 +1,21 @@
#ifndef VRS_IMAGE_INCLUDED
#define VRS_IMAGE_INCLUDED
#include "Packages/com.unity.render-pipelines.core/ShaderLibrary/Common.hlsl"
RW_TEXTURE2D(uint, _ShadingRateImage);
uniform float4 _VrsScaleBias;
void ImageStore(uint shadingRateNativeValue, uint2 gid)
{
#if !defined(APPLY_Y_FLIP)
// compute shader introduce a natural y-flip
// hence the reverse test
gid.y = _VrsScaleBias.w - 1 - gid.y;
#endif
_ShadingRateImage[gid] = shadingRateNativeValue;
}
#endif // VRS_IMAGE_INCLUDED
@@ -0,0 +1,3 @@
fileFormatVersion: 2
guid: 3cc7957ff84646bbbb849b88919e2109
timeCreated: 1710958387
@@ -0,0 +1,23 @@
#ifndef VRS_MAINTEX_INCLUDED
#define VRS_MAINTEX_INCLUDED
#include "Packages/com.unity.render-pipelines.core/ShaderLibrary/Common.hlsl"
#include "Packages/com.unity.render-pipelines.core/ShaderLibrary/TextureXR.hlsl"
#include "Packages/com.unity.render-pipelines.core/Runtime/Vrs/Shaders/VrsShadingRates.hlsl"
#include "Packages/com.unity.render-pipelines.core/ShaderLibrary/GlobalSamplers.hlsl"
TEXTURE2D_X(_VrsMainTex);
StructuredBuffer<float4> _VrsMainTexLut;
float4 LoadVrsMainTex(uint2 tid)
{
return LOAD_TEXTURE2D_X(_VrsMainTex, tid);
}
float4 SampleVrsMainTexFromCoords(float2 coords)
{
return SAMPLE_TEXTURE2D_X_LOD(_VrsMainTex, sampler_PointClamp, coords, 0);
}
#endif // VRS_MAINTEX_INCLUDED
@@ -0,0 +1,3 @@
fileFormatVersion: 2
guid: 08b9525dab8d497cb640174e593275d1
timeCreated: 1710958899
@@ -0,0 +1,45 @@
#ifndef VRS_SHADING_RATES_INCLUDED
#define VRS_SHADING_RATES_INCLUDED
// Must be kept in sync with ShadingRateFragmentSize
#define SHADING_RATE_FRAGMENT_SIZE_1X1 0 // native value = 0b0000 -> 0
#define SHADING_RATE_FRAGMENT_SIZE_1X2 1 // native value = 0b0001 -> 1
#define SHADING_RATE_FRAGMENT_SIZE_2X1 2 // native value = 0b0100 -> 4
#define SHADING_RATE_FRAGMENT_SIZE_2X2 3 // native value = 0b0101 -> 5
#define SHADING_RATE_FRAGMENT_SIZE_1x4 4 // native value = 0b0010 -> 2
#define SHADING_RATE_FRAGMENT_SIZE_4x1 5 // native value = 0b1000 -> 8
#define SHADING_RATE_FRAGMENT_SIZE_2x4 6 // native value = 0b0110 -> 6
#define SHADING_RATE_FRAGMENT_SIZE_4x2 7 // native value = 0b1001 -> 9
#define SHADING_RATE_FRAGMENT_SIZE_4x4 8 // native value = 0b1010 -> 10
#define SHADING_RATE_FRAGMENT_SIZE_COUNT 9
StructuredBuffer<uint> _ShadingRateNativeValues;
/// <summary>
/// Unpack a shading rate native value into its horizontal and vertical components.
/// </summary>
/// <param name="shadingRateNativeValue">Shading rate native value to unpack.</param>
/// <returns>Unpacked value where x component is the horizontal shading rate and y is the vertical shading rate.</returns>
uint2 UnpackShadingRate(uint shadingRateNativeValue)
{
return uint2((shadingRateNativeValue >> 2) & 0x03, shadingRateNativeValue & 0x03);
}
/// <summary>
/// Pack an unpacked shading rates into its native value.
/// </summary>
/// <param name="unpackedShadingRate">Unpacked shading rate.</param>
/// <returns>Shading rate native value.</returns>
uint PackShadingRate(uint2 unpackedShadingRate)
{
// If using 4x4 rate, be careful to check for invalid rates
// if (shadingRate.x == 2 && shadingRate.y == 0)
// shadingRate.y = 1;
//
// if (shadingRate.x == 0 && shadingRate.y == 2)
// shadingRate.x = 1;
return (unpackedShadingRate.x << 2) | unpackedShadingRate.y;
}
#endif // VRS_SHADING_RATES_INCLUDED
@@ -0,0 +1,3 @@
fileFormatVersion: 2
guid: dbb73cb4c1954036a32ce1ade17ac0fd
timeCreated: 1710965275
@@ -0,0 +1,69 @@
// #pragma enable_d3d11_debug_symbols
#pragma exclude_renderers glcore gles3
#pragma multi_compile VRS_TILE_SIZE_8 VRS_TILE_SIZE_16 VRS_TILE_SIZE_32
#pragma multi_compile _ DISABLE_TEXTURE2D_X_ARRAY
#pragma multi_compile _ APPLY_Y_FLIP
#pragma kernel TextureCopy
#pragma kernel TextureReduce
#include "Packages/com.unity.render-pipelines.core/Runtime/Vrs/Shaders/VrsTileSize.hlsl"
#include "Packages/com.unity.render-pipelines.core/Runtime/Vrs/Shaders/VrsImage.hlsl"
#include "Packages/com.unity.render-pipelines.core/Runtime/Vrs/Shaders/VrsMainTex.hlsl"
#include "Packages/com.unity.render-pipelines.core/Runtime/Vrs/Shaders/VrsShadingRates.hlsl"
uint GetShadingRateNativeValueFromColor(float3 color)
{
for (uint i = 0; i < SHADING_RATE_FRAGMENT_SIZE_COUNT; ++i)
{
float3 delta = abs(color - _VrsMainTexLut[i].rgb);
if (all(delta < 0.01f))
return _ShadingRateNativeValues[i];
}
return _ShadingRateNativeValues[SHADING_RATE_FRAGMENT_SIZE_1X1];
}
[numthreads(1, 1, 1)]
void TextureCopy(uint2 tid : SV_DispatchThreadID)
{
float3 color = LoadVrsMainTex(tid).rgb;
uint shadingRateNativeValue = GetShadingRateNativeValueFromColor(color);
ImageStore(shadingRateNativeValue, tid);
}
groupshared uint2 ldsShadingRate;
[numthreads(VRS_TILE_SIZE, VRS_TILE_SIZE, 1)]
void TextureReduce(uint2 tid : SV_DispatchThreadID, uint2 gid: SV_GroupID, uint gidx: SV_GroupIndex)
{
// initialize lds: only 1st thread of group does it
if (gidx == 0)
ldsShadingRate = UnpackShadingRate(_ShadingRateNativeValues[SHADING_RATE_FRAGMENT_SIZE_4x4]);
// read: 1 thread == 1 pixel in main tex, each thread in group must read
float3 color = SampleVrsMainTexFromCoords(tid * _VrsScaleBias.xy).rgb;
uint shadingRateNativeValue = GetShadingRateNativeValueFromColor(color);
uint2 shadingRate = UnpackShadingRate(shadingRateNativeValue);
GroupMemoryBarrierWithGroupSync();
// parallel reduce: 1 group == 1 pixel in vrs image
// conservative reduce: pick highest rate (hence min)
InterlockedMin(ldsShadingRate.x, shadingRate.x);
InterlockedMin(ldsShadingRate.y, shadingRate.y);
GroupMemoryBarrierWithGroupSync();
// store result: only 1st thread of group does it
if (gidx == 0)
{
shadingRateNativeValue = PackShadingRate(ldsShadingRate);
ImageStore(shadingRateNativeValue, gid);
}
}
@@ -0,0 +1,7 @@
fileFormatVersion: 2
guid: cacb30de6c40c7444bbc78cb0a81fd2a
ComputeShaderImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:
@@ -0,0 +1,14 @@
#ifndef VRS_TILE_SIZE_INCLUDED
#define VRS_TILE_SIZE_INCLUDED
#if defined(VRS_TILE_SIZE_8)
#define VRS_TILE_SIZE 8
#elif defined(VRS_TILE_SIZE_16)
#define VRS_TILE_SIZE 16
#elif defined(VRS_TILE_SIZE_32)
#define VRS_TILE_SIZE 32
#else
#error Unsupported tile size
#endif
#endif // VRS_TILE_SIZE_INCLUDED
@@ -0,0 +1,3 @@
fileFormatVersion: 2
guid: 234c0613ab6043a7852e6ab1a268352a
timeCreated: 1710957835
@@ -0,0 +1,46 @@
Shader "Hidden/Core/VrsVisualization"
{
SubShader
{
Pass
{
Name "VrsVisualization"
ZTest Always
ZWrite Off
Cull Off
HLSLPROGRAM
//#pragma enable_debug_symbols
#pragma exclude_renderers glcore gles3
#pragma vertex Vert
#pragma fragment Fragment
#include "Packages/com.unity.render-pipelines.core/ShaderLibrary/TextureXR.hlsl"
#include "Packages/com.unity.render-pipelines.core/ShaderLibrary/Common.hlsl"
#include "Packages/com.unity.render-pipelines.core/ShaderLibrary/Packing.hlsl"
#include "Packages/com.unity.render-pipelines.core/Runtime/Utilities/Blit.hlsl"
TYPED_TEXTURE2D(uint, _ShadingRateImage);
StructuredBuffer<float4> _VisualizationLut;
uniform float4 _VisualizationParams;
#define PixelToTileScale _VisualizationParams.xy
float4 Fragment(Varyings input) : SV_Target
{
UNITY_SETUP_STEREO_EYE_INDEX_POST_VERTEX(input);
uint2 pixel = (uint2)(input.positionCS.xy * PixelToTileScale);
uint shadingRate = LOAD_TEXTURE2D_LOD(_ShadingRateImage, pixel, 0);
return _VisualizationLut[shadingRate];
}
ENDHLSL
}
}
Fallback Off
}
@@ -0,0 +1,9 @@
fileFormatVersion: 2
guid: 620b55b8040a88d468e94abe55bed5ba
ShaderImporter:
externalObjects: {}
defaultTextures: []
nonModifiableTextures: []
userData:
assetBundleName:
assetBundleVariant: