From 45b2ff31ae04bed27fcc7548fd9e0a0694b3141b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tur=C3=A1nszki=20J=C3=A1nos?= Date: Wed, 29 Jan 2025 08:52:12 +0100 Subject: [PATCH] reduced vs-ps parameters --- WickedEngine/shaders/globals.hlsli | 2 +- WickedEngine/shaders/objectHF.hlsli | 61 ++++++++++++++--------------- WickedEngine/wiVersion.cpp | 2 +- 3 files changed, 32 insertions(+), 33 deletions(-) diff --git a/WickedEngine/shaders/globals.hlsli b/WickedEngine/shaders/globals.hlsli index 8476ebdb5..b3dd9b6be 100644 --- a/WickedEngine/shaders/globals.hlsli +++ b/WickedEngine/shaders/globals.hlsli @@ -598,7 +598,7 @@ struct PrimitiveID primitiveIndex = 0; instanceIndex = 0; subsetIndex = 0; - maybe_clustered = 0; + maybe_clustered = false; } // These packing methods require meshlet data, and pack into 32 bits: diff --git a/WickedEngine/shaders/objectHF.hlsli b/WickedEngine/shaders/objectHF.hlsli index 2b45cc891..5c5b8350c 100644 --- a/WickedEngine/shaders/objectHF.hlsli +++ b/WickedEngine/shaders/objectHF.hlsli @@ -284,22 +284,14 @@ struct PixelInput float clip : SV_ClipDistance0; #endif // OBJECTSHADER_USE_CLIPPLANE -#if defined(OBJECTSHADER_USE_INSTANCEINDEX) || defined(OBJECTSHADER_USE_DITHERING) - uint instanceIndex_dither : INSTANCEINDEX_DITHER; -#endif // OBJECTSHADER_USE_INSTANCEINDEX || OBJECTSHADER_USE_DITHERING - -#ifdef OBJECTSHADER_USE_CAMERAINDEX - uint cameraIndex : CAMERAINDEX; -#endif // OBJECTSHADER_USE_CAMERAINDEX +#if defined(OBJECTSHADER_USE_INSTANCEINDEX) || defined(OBJECTSHADER_USE_DITHERING) || defined(OBJECTSHADER_USE_CAMERAINDEX) + uint poi : INSTANCEPOINTER; +#endif // OBJECTSHADER_USE_INSTANCEINDEX || OBJECTSHADER_USE_DITHERING || OBJECTSHADER_USE_CAMERAINDEX #ifdef OBJECTSHADER_USE_UVSETS float4 uvsets : UVSETS; #endif // OBJECTSHADER_USE_UVSETS -#ifdef OBJECTSHADER_USE_COLOR - half4 color : COLOR; -#endif // OBJECTSHADER_USE_COLOR - #ifdef OBJECTSHADER_USE_TANGENT float4 tan : TANGENT; #endif // OBJECTSHADER_USE_TANGENT @@ -309,10 +301,14 @@ struct PixelInput #endif // OBJECTSHADER_USE_NORMAL #ifdef OBJECTSHADER_USE_COMMON - float2 atl : ATLAS; half2 ao_wet : COMMON; + float2 atl : ATLAS; #endif // OBJECTSHADER_USE_COMMON +#ifdef OBJECTSHADER_USE_COLOR + half4 color : COLOR; +#endif // OBJECTSHADER_USE_COLOR + #ifndef OBJECTSHADER_COMPILE_MS #ifdef OBJECTSHADER_USE_RENDERTARGETARRAYINDEX uint RTIndex : SV_RenderTargetArrayIndex; @@ -328,16 +324,29 @@ struct PixelInput #ifdef OBJECTSHADER_USE_INSTANCEINDEX inline uint GetInstanceIndex() { - return instanceIndex_dither & 0xFFFFFF; + ShaderMeshInstancePointer pointer; + pointer.data = poi; + return pointer.GetInstanceIndex(); } #endif // OBJECTSHADER_USE_INSTANCEINDEX #ifdef OBJECTSHADER_USE_DITHERING inline half GetDither() { - return half((instanceIndex_dither >> 24u) / 255.0); + ShaderMeshInstancePointer pointer; + pointer.data = poi; + return pointer.GetDither(); } #endif // OBJECTSHADER_USE_DITHERING + +#ifdef OBJECTSHADER_USE_CAMERAINDEX + inline uint GetCameraIndex() + { + ShaderMeshInstancePointer pointer; + pointer.data = poi; + return pointer.GetCameraIndex(); + } +#endif // OBJECTSHADER_USE_CAMERAINDEX #ifdef OBJECTSHADER_USE_UVSETS inline float4 GetUVSets() @@ -349,7 +358,7 @@ struct PixelInput inline float3 GetPos3D() { #ifdef OBJECTSHADER_USE_CAMERAINDEX - ShaderCamera camera = GetCamera(cameraIndex); + ShaderCamera camera = GetCamera(GetCameraIndex()); #else ShaderCamera camera = GetCamera(); #endif // OBJECTSHADER_USE_CAMERAINDEX @@ -360,7 +369,7 @@ struct PixelInput inline float3 GetViewVector() { #ifdef OBJECTSHADER_USE_CAMERAINDEX - ShaderCamera camera = GetCamera(cameraIndex); + ShaderCamera camera = GetCamera(GetCameraIndex()); #else ShaderCamera camera = GetCamera(); #endif // OBJECTSHADER_USE_CAMERAINDEX @@ -394,19 +403,9 @@ PixelInput vertex_to_pixel_export(VertexInput input) Out.clip = dot(surface.position, camera.clip_plane); #endif // OBJECTSHADER_USE_CLIPPLANE -#if defined(OBJECTSHADER_USE_INSTANCEINDEX) || defined(OBJECTSHADER_USE_DITHERING) - Out.instanceIndex_dither = 0; -#ifdef OBJECTSHADER_USE_INSTANCEINDEX - Out.instanceIndex_dither |= input.GetInstancePointer().GetInstanceIndex() & 0xFFFFFF; -#endif // OBJECTSHADER_USE_INSTANCEINDEX -#ifdef OBJECTSHADER_USE_DITHERING - Out.instanceIndex_dither |= (uint(surface.color.a * 255u) & 0xFF) << 24u; -#endif // OBJECTSHADER_USE_DITHERING -#endif // OBJECTSHADER_USE_INSTANCEINDEX || OBJECTSHADER_USE_DITHERING - -#ifdef OBJECTSHADER_USE_CAMERAINDEX - Out.cameraIndex = cameraIndex; -#endif // OBJECTSHADER_USE_CAMERAINDEX +#if defined(OBJECTSHADER_USE_INSTANCEINDEX) || defined(OBJECTSHADER_USE_DITHERING) || defined(OBJECTSHADER_USE_CAMERAINDEX) + Out.poi = input.GetInstancePointer().data; +#endif // OBJECTSHADER_USE_INSTANCEINDEX || OBJECTSHADER_USE_DITHERING || OBJECTSHADER_USE_CAMERAINDEX #ifdef OBJECTSHADER_USE_COLOR Out.color = surface.color; @@ -500,7 +499,7 @@ float4 main(PixelInput input, in bool is_frontface : SV_IsFrontFace APPEND_COVER // Pixel shader base: { #ifdef OBJECTSHADER_USE_CAMERAINDEX - ShaderCamera camera = GetCamera(input.cameraIndex); + ShaderCamera camera = GetCamera(input.GetCameraIndex()); #else ShaderCamera camera = GetCamera(); #endif // OBJECTSHADER_USE_CAMERAINDEX @@ -528,7 +527,7 @@ float4 main(PixelInput input, in bool is_frontface : SV_IsFrontFace APPEND_COVER #ifndef ENVMAPRENDERING #ifdef OBJECTSHADER_USE_DITHERING // apply dithering: - clip(dither(pixel + GetTemporalAASampleRotation()) - (1 - input.GetDither())); + clip(dither(pixel + GetTemporalAASampleRotation()) - input.GetDither()); #endif // OBJECTSHADER_USE_DITHERING #endif // DISABLE_ALPHATEST #endif // TRANSPARENT diff --git a/WickedEngine/wiVersion.cpp b/WickedEngine/wiVersion.cpp index 9f89262dc..be9899749 100644 --- a/WickedEngine/wiVersion.cpp +++ b/WickedEngine/wiVersion.cpp @@ -9,7 +9,7 @@ namespace wi::version // minor features, major updates, breaking compatibility changes const int minor = 71; // minor bug fixes, alterations, refactors, updates - const int revision = 666; + const int revision = 667; const std::string version_string = std::to_string(major) + "." + std::to_string(minor) + "." + std::to_string(revision);