From 30076cf42cf0022e8d61fcfca8f1d89c3e35ddb1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tur=C3=A1nszki=20J=C3=A1nos?= Date: Sun, 12 Jun 2022 11:47:23 +0200 Subject: [PATCH] tighter packing for ShaderMeshInstancePointer --- WickedEngine/shaders/ShaderInterop_Renderer.h | 24 ++++++++++--------- WickedEngine/shaders/impostorVS.hlsl | 4 ++-- WickedEngine/shaders/objectHF.hlsli | 4 ++-- WickedEngine/wiGUI.cpp | 3 +++ WickedEngine/wiRenderer.cpp | 3 +-- WickedEngine/wiVersion.cpp | 2 +- 6 files changed, 22 insertions(+), 18 deletions(-) diff --git a/WickedEngine/shaders/ShaderInterop_Renderer.h b/WickedEngine/shaders/ShaderInterop_Renderer.h index 91c983375..3ae5151ac 100644 --- a/WickedEngine/shaders/ShaderInterop_Renderer.h +++ b/WickedEngine/shaders/ShaderInterop_Renderer.h @@ -311,28 +311,30 @@ struct ShaderMeshInstance }; struct ShaderMeshInstancePointer { - uint instanceIndex; - uint userdata; + uint instanceIndex_frustumIndex_dither; void init() { - instanceIndex = ~0; - userdata = 0; + instanceIndex_frustumIndex_dither = ~0; } - void Create(uint _instanceIndex, uint frustum_index, float dither) + void Create(uint _instanceIndex, uint frustum_index = 0, float dither = 0) { - instanceIndex = _instanceIndex; - userdata = 0; - userdata |= frustum_index & 0xF; - userdata |= (uint(dither * 255.0f) & 0xFF) << 4u; + instanceIndex_frustumIndex_dither = 0; + instanceIndex_frustumIndex_dither |= _instanceIndex & 0xFFFFFF; + instanceIndex_frustumIndex_dither |= (frustum_index & 0xF) << 24u; + instanceIndex_frustumIndex_dither |= (uint(dither * 15.0f) & 0xF) << 28u; + } + uint GetInstanceIndex() + { + return instanceIndex_frustumIndex_dither & 0xFFFFFF; } uint GetFrustumIndex() { - return userdata & 0xF; + return (instanceIndex_frustumIndex_dither >> 24u) & 0xF; } float GetDither() { - return ((userdata >> 4u) & 0xFF) / 255.0f; + return float((instanceIndex_frustumIndex_dither >> 28u) & 0xF) / 15.0f; } }; diff --git a/WickedEngine/shaders/impostorVS.hlsl b/WickedEngine/shaders/impostorVS.hlsl index 6f0a2abfa..50ea479ed 100644 --- a/WickedEngine/shaders/impostorVS.hlsl +++ b/WickedEngine/shaders/impostorVS.hlsl @@ -24,7 +24,7 @@ VSOut main(uint fakeIndex : SV_VERTEXID) const uint instanceID = fakeIndex / 6; ShaderMeshInstancePointer poi = impostorBuffer.Load(push.instanceOffset + instanceID * sizeof(ShaderMeshInstancePointer)); - ShaderMeshInstance instance = load_instance(poi.instanceIndex); + ShaderMeshInstance instance = load_instance(poi.GetInstanceIndex()); ShaderGeometry geometry = load_geometry(instance.geometryOffset); float3 extents = geometry.aabb_max - geometry.aabb_min; float radius = max(extents.x, max(extents.y, extents.z)) * 0.5; @@ -61,7 +61,7 @@ VSOut main(uint fakeIndex : SV_VERTEXID) Out.uv = uv; Out.slice = slice; Out.dither = poi.GetDither(); - Out.instanceID = poi.instanceIndex; + Out.instanceID = poi.GetInstanceIndex(); return Out; } diff --git a/WickedEngine/shaders/objectHF.hlsli b/WickedEngine/shaders/objectHF.hlsli index d7350e9d1..1214ca285 100644 --- a/WickedEngine/shaders/objectHF.hlsli +++ b/WickedEngine/shaders/objectHF.hlsli @@ -195,7 +195,7 @@ struct VertexInput ShaderMeshInstance GetInstance() { if (push.instances >= 0) - return load_instance(GetInstancePointer().instanceIndex); + return load_instance(GetInstancePointer().GetInstanceIndex()); ShaderMeshInstance inst; inst.init(); @@ -940,7 +940,7 @@ PixelInput main(VertexInput input) PixelInput Out; #ifdef OBJECTSHADER_USE_INSTANCEINDEX - Out.instanceIndex = input.GetInstancePointer().instanceIndex; + Out.instanceIndex = input.GetInstancePointer().GetInstanceIndex(); #endif // OBJECTSHADER_USE_INSTANCEINDEX VertexSurface surface; diff --git a/WickedEngine/wiGUI.cpp b/WickedEngine/wiGUI.cpp index 106afe4e7..05f8da426 100644 --- a/WickedEngine/wiGUI.cpp +++ b/WickedEngine/wiGUI.cpp @@ -872,6 +872,9 @@ namespace wi::gui sprites_knob[i].params.siz.y = scale.y - knob_inset_border.y * 2; } } + + if (!IsScrollbarRequired()) + state = IDLE; } void ScrollBar::Render(const wi::Canvas& canvas, CommandList cmd) const { diff --git a/WickedEngine/wiRenderer.cpp b/WickedEngine/wiRenderer.cpp index e1237e636..91a6b1266 100644 --- a/WickedEngine/wiRenderer.cpp +++ b/WickedEngine/wiRenderer.cpp @@ -5965,8 +5965,7 @@ void DrawDebugWorld( GraphicsDevice::GPUAllocation mem = device->AllocateGPU(sizeof(ShaderMeshInstancePointer), cmd); ShaderMeshInstancePointer poi; - poi.init(); - poi.instanceIndex = (uint)scene.objects.GetIndex(x.objectEntity); + poi.Create((uint)scene.objects.GetIndex(x.objectEntity)); std::memcpy(mem.data, &poi, sizeof(poi)); device->BindIndexBuffer(&mesh.generalBuffer, mesh.GetIndexFormat(), mesh.ib.offset, cmd); diff --git a/WickedEngine/wiVersion.cpp b/WickedEngine/wiVersion.cpp index dcaaaafe0..d2fa795a1 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 = 60; // minor bug fixes, alterations, refactors, updates - const int revision = 90; + const int revision = 91; const std::string version_string = std::to_string(major) + "." + std::to_string(minor) + "." + std::to_string(revision);