This repository has been archived by the owner on Aug 5, 2022. It is now read-only.
/
stage_multisample_createinfo.go
92 lines (72 loc) · 2.76 KB
/
stage_multisample_createinfo.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
package core1_0
/*
#include <stdlib.h>
#include "vulkan/vulkan.h"
*/
import "C"
import (
"github.com/CannibalVox/VKng/core/common"
"github.com/CannibalVox/cgoparam"
"github.com/cockroachdb/errors"
"unsafe"
)
type PipelineMultisampleStateCreateFlags uint32
var pipelineMultisampleStateCreateFlagsMapping = common.NewFlagStringMapping[PipelineMultisampleStateCreateFlags]()
func (f PipelineMultisampleStateCreateFlags) Register(str string) {
pipelineMultisampleStateCreateFlagsMapping.Register(f, str)
}
func (f PipelineMultisampleStateCreateFlags) String() string {
return pipelineMultisampleStateCreateFlagsMapping.FlagsToString(f)
}
////
type PipelineMultisampleStateCreateInfo struct {
Flags PipelineMultisampleStateCreateFlags
RasterizationSamples SampleCountFlags
SampleShadingEnable bool
MinSampleShading float32
SampleMask []uint32
AlphaToCoverageEnable bool
AlphaToOneEnable bool
common.NextOptions
}
func (o PipelineMultisampleStateCreateInfo) PopulateCPointer(allocator *cgoparam.Allocator, preallocatedPointer unsafe.Pointer, next unsafe.Pointer) (unsafe.Pointer, error) {
if preallocatedPointer == unsafe.Pointer(nil) {
preallocatedPointer = allocator.Malloc(C.sizeof_struct_VkPipelineMultisampleStateCreateInfo)
}
createInfo := (*C.VkPipelineMultisampleStateCreateInfo)(preallocatedPointer)
createInfo.sType = C.VK_STRUCTURE_TYPE_PIPELINE_MULTISAMPLE_STATE_CREATE_INFO
createInfo.flags = C.VkPipelineMultisampleStateCreateFlags(o.Flags)
createInfo.pNext = next
createInfo.rasterizationSamples = C.VkSampleCountFlagBits(o.RasterizationSamples)
createInfo.sampleShadingEnable = C.VK_FALSE
createInfo.alphaToCoverageEnable = C.VK_FALSE
createInfo.alphaToOneEnable = C.VK_FALSE
if o.SampleShadingEnable {
createInfo.sampleShadingEnable = C.VK_TRUE
}
if o.AlphaToCoverageEnable {
createInfo.alphaToCoverageEnable = C.VK_TRUE
}
if o.AlphaToOneEnable {
createInfo.alphaToOneEnable = C.VK_TRUE
}
createInfo.minSampleShading = C.float(o.MinSampleShading)
createInfo.pSampleMask = nil
if len(o.SampleMask) > 0 {
sampleCount := o.RasterizationSamples.Count()
maskSize := sampleCount / 32
if sampleCount%32 != 0 {
maskSize++
}
if len(o.SampleMask) != maskSize {
return nil, errors.Newf("expected a sample mask size of %d, because %d rasterization samples were specified- however, received a sample mask size of %d", maskSize, sampleCount, len(o.SampleMask))
}
sampleMaskPtr := (*C.VkSampleMask)(allocator.Malloc(maskSize * int(unsafe.Sizeof(C.VkSampleMask(0)))))
sampleMaskSlice := ([]C.VkSampleMask)(unsafe.Slice(sampleMaskPtr, maskSize))
for i := 0; i < maskSize; i++ {
sampleMaskSlice[i] = C.VkSampleMask(o.SampleMask[i])
}
createInfo.pSampleMask = sampleMaskPtr
}
return preallocatedPointer, nil
}