Hii
Ich hab ein Kleines uns unschönes problem und zwar wir mein Struct falsch ausgerichtet wird trz.
Aber nur wenn ich uint nutz start bool.
Ich weiß bool ist 1Byte groß, deswegen nutz ich FieldOffset um den Bool an die richtige stelle zu rücken.
Aber was ich nicht verstehe, warum ändert C# meine Reinfolge trz Attributen.
Foto's
VkPhysicalDeviceLimits - Kann ignoriert werden, jede änderung brachte auch keine änderung im Aufbau
Spoiler anzeigen
Struct mit dem es geht .
Spoiler anzeigen
Struct mit dem es nicht geht.
Spoiler anzeigen
Ich hab ein Kleines uns unschönes problem und zwar wir mein Struct falsch ausgerichtet wird trz.
[StructLayout(LayoutKind.Sequential, ... )]
Aber nur wenn ich uint nutz start bool.
Ich weiß bool ist 1Byte groß, deswegen nutz ich FieldOffset um den Bool an die richtige stelle zu rücken.
Aber was ich nicht verstehe, warum ändert C# meine Reinfolge trz Attributen.
Foto's
C#-Quellcode
- [StructLayout(LayoutKind.Sequential)]
- public unsafe struct VkPhysicalDeviceProperties
- {
- public VkVersion apiVersion;
- public uint driverVersion;
- public uint vendorID;
- public uint deviceID;
- public VkPhysicalDeviceType deviceType;
- public fixed sbyte deviceName[VK_MAX_PHYSICAL_DEVICE_NAME_SIZE];
- public fixed byte pipelineCacheUUID[VK_UUID_SIZE];
- [MarshalAs(UnmanagedType.Struct)]
- public VkPhysicalDeviceLimits limits;
- public VkPhysicalDeviceSparseProperties sparseProperties;
- }
VkPhysicalDeviceLimits - Kann ignoriert werden, jede änderung brachte auch keine änderung im Aufbau
C#-Quellcode
- [StructLayout(LayoutKind.Sequential)]
- public unsafe struct VkPhysicalDeviceLimits
- {
- public uint maxImageDimension1D;
- public uint maxImageDimension2D;
- public uint maxImageDimension3D;
- public uint maxImageDimensionCube;
- public uint maxImageArrayLayers;
- public uint maxTexelBufferElements;
- public uint maxUniformBufferRange;
- public uint maxStorageBufferRange;
- public uint maxPushConstantsSize;
- public uint maxMemoryAllocationCount;
- public uint maxSamplerAllocationCount;
- public VkDeviceSize bufferImageGranularity;
- public VkDeviceSize sparseAddressSpaceSize;
- public uint maxBoundDescriptorSets;
- public uint maxPerStageDescriptorSamplers;
- public uint maxPerStageDescriptorUniformBuffers;
- public uint maxPerStageDescriptorStorageBuffers;
- public uint maxPerStageDescriptorSampledImages;
- public uint maxPerStageDescriptorStorageImages;
- public uint maxPerStageDescriptorInputAttachments;
- public uint maxPerStageResources;
- public uint maxDescriptorSetSamplers;
- public uint maxDescriptorSetUniformBuffers;
- public uint maxDescriptorSetUniformBuffersDynamic;
- public uint maxDescriptorSetStorageBuffers;
- public uint maxDescriptorSetStorageBuffersDynamic;
- public uint maxDescriptorSetSampledImages;
- public uint maxDescriptorSetStorageImages;
- public uint maxDescriptorSetInputAttachments;
- public uint maxVertexInputAttributes;
- public uint maxVertexInputBindings;
- public uint maxVertexInputAttributeOffset;
- public uint maxVertexInputBindingStride;
- public uint maxVertexOutputComponents;
- public uint maxTessellationGenerationLevel;
- public uint maxTessellationPatchSize;
- public uint maxTessellationControlPerVertexInputComponents;
- public uint maxTessellationControlPerVertexOutputComponents;
- public uint maxTessellationControlPerPatchOutputComponents;
- public uint maxTessellationControlTotalOutputComponents;
- public uint maxTessellationEvaluationInputComponents;
- public uint maxTessellationEvaluationOutputComponents;
- public uint maxGeometryShaderInvocations;
- public uint maxGeometryInputComponents;
- public uint maxGeometryOutputComponents;
- public uint maxGeometryOutputVertices;
- public uint maxGeometryTotalOutputComponents;
- public uint maxFragmentInputComponents;
- public uint maxFragmentOutputAttachments;
- public uint maxFragmentDualSrcAttachments;
- public uint maxFragmentCombinedOutputResources;
- public uint maxComputeSharedMemorySize;
- public fixed uint maxComputeWorkGroupCount[3];
- public uint maxComputeWorkGroupInvocations;
- public fixed uint maxComputeWorkGroupSize[3];
- public uint subPixelPrecisionBits;
- public uint subTexelPrecisionBits;
- public uint mipmapPrecisionBits;
- public uint maxDrawIndexedIndexValue;
- public uint maxDrawIndirectCount;
- public float maxSamplerLodBias;
- public float maxSamplerAnisotropy;
- public uint maxViewports;
- public fixed uint maxViewportDimensions[2];
- public fixed float viewportBoundsRange[2];
- public uint viewportSubPixelBits;
- public nuint minMemoryMapAlignment;
- public VkDeviceSize minTexelBufferOffsetAlignment;
- public VkDeviceSize minUniformBufferOffsetAlignment;
- public VkDeviceSize minStorageBufferOffsetAlignment;
- public int minTexelOffset;
- public uint maxTexelOffset;
- public int minTexelGatherOffset;
- public uint maxTexelGatherOffset;
- public float minInterpolationOffset;
- public float maxInterpolationOffset;
- public uint subPixelInterpolationOffsetBits;
- public uint maxFramebufferWidth;
- public uint maxFramebufferHeight;
- public uint maxFramebufferLayers;
- public VkSampleCountFlags framebufferColorSampleCounts;
- public VkSampleCountFlags framebufferDepthSampleCounts;
- public VkSampleCountFlags framebufferStencilSampleCounts;
- public VkSampleCountFlags framebufferNoAttachmentsSampleCounts;
- public uint maxColorAttachments;
- public VkSampleCountFlags sampledImageColorSampleCounts;
- public VkSampleCountFlags sampledImageIntegerSampleCounts;
- public VkSampleCountFlags sampledImageDepthSampleCounts;
- public VkSampleCountFlags sampledImageStencilSampleCounts;
- public VkSampleCountFlags storageImageSampleCounts;
- public uint maxSampleMaskWords;
- //[MarshalAs(UnmanagedType.Bool)]
- public uint timestampComputeAndGraphics;
- public float timestampPeriod;
- public uint maxClipDistances;
- public uint maxCullDistances;
- public uint maxCombinedClipAndCullDistances;
- public uint discreteQueuePriorities;
- public fixed float pointSizeRange[2];
- public fixed float lineWidthRange[2];
- public float pointSizeGranularity;
- public float lineWidthGranularity;
- //[MarshalAs(UnmanagedType.Bool)]
- public uint strictLines;
- //[MarshalAs(UnmanagedType.Bool)]
- public uint standardSampleLocations;
- public VkDeviceSize optimalBufferCopyOffsetAlignment;
- public VkDeviceSize optimalBufferCopyRowPitchAlignment;
- public VkDeviceSize nonCoherentAtomSize;
- }
Struct mit dem es geht .
C#-Quellcode
- [StructLayout(LayoutKind.Explicit, Size = 20)]
- public readonly struct VkPhysicalDeviceSparseProperties
- {
- [FieldOffset(0)]
- public readonly uint residencyStandard2DBlockShape;
- [FieldOffset(4)]
- public readonly uint residencyStandard2DMultisampleBlockShape;
- [FieldOffset(8)]
- public readonly uint residencyStandard3DBlockShape;
- [FieldOffset(12)]
- public readonly uint residencyAlignedMipSize;
- [FieldOffset(16)]
- public readonly uint residencyNonResidentStrict;
- }
Struct mit dem es nicht geht.
C#-Quellcode
- [StructLayout(LayoutKind.Explicit, Size = 20)]
- public readonly struct VkPhysicalDeviceSparseProperties
- {
- [MarshalAs(UnmanagedType.Bool)]
- [FieldOffset(0)]
- public readonly bool residencyStandard2DBlockShape;
- [MarshalAs(UnmanagedType.Bool)]
- [FieldOffset(4)]
- public readonly bool residencyStandard2DMultisampleBlockShape;
- [FieldOffset(8)]
- [MarshalAs(UnmanagedType.Bool)]
- public readonly bool residencyStandard3DBlockShape;
- [FieldOffset(12)]
- [MarshalAs(UnmanagedType.Bool)]
- public readonly bool residencyAlignedMipSize;
- [FieldOffset(16)]
- [MarshalAs(UnmanagedType.Bool)]
- public readonly bool residencyNonResidentStrict;
- }