vulkan

package
v0.0.0-...-224eed5 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Dec 26, 2024 License: MIT Imports: 14 Imported by: 0

Documentation

Index

Constants

View Source
const (
	// The index of the global descriptor set.
	DESC_SET_INDEX_GLOBAL uint32 = 0
	// The index of the instance descriptor set.
	DESC_SET_INDEX_INSTANCE uint32 = 1
)
View Source
const (
	VULKAN_SHADER_MAX_STAGES uint32 = 8
	/** @brief The maximum number of textures allowed at the global level. */
	VULKAN_SHADER_MAX_GLOBAL_TEXTURES uint32 = 31
	/** @brief The maximum number of textures allowed at the instance level. */
	VULKAN_SHADER_MAX_INSTANCE_TEXTURES uint32 = 31
	/** @brief The maximum number of vertex input attributes allowed. */
	VULKAN_SHADER_MAX_ATTRIBUTES uint32 = 16
	/**
	 * @brief The maximum number of uniforms and samplers allowed at the
	 * global, instance and local levels combined. It's probably more than
	 * will ever be needed.
	 */
	VULKAN_SHADER_MAX_UNIFORMS uint32 = 128
	/** @brief The maximum number of bindings per descriptor set. */
	VULKAN_SHADER_MAX_BINDINGS uint32 = 2
	/** @brief The maximum number of push constant ranges for a shader. */
	VULKAN_SHADER_MAX_PUSH_CONST_RANGES uint32 = 32
)

*

  • @brief Put some hard limits in place for the count of supported textures,
  • attributes, uniforms, etc. This is to maintain memory locality and avoid
  • dynamic allocations.

* @brief The maximum number of stages (such as vertex, fragment, compute, etc.) allowed.

View Source
const VULKAN_MAX_GEOMETRY_COUNT uint32 = 4096

*

  • @brief Max number of simultaneously uploaded geometries
  • @todo TODO: make configurable
View Source
const VULKAN_MAX_MATERIAL_COUNT uint32 = 1024

*

  • @brief Max number of material instances
  • @todo TODO: make configurable
View Source
const VULKAN_MAX_UI_COUNT uint32 = 1024

*

  • @brief Max number of UI control instances
  • @todo TODO: make configurable

Variables

This section is empty.

Functions

func ConditionalOperator

func ConditionalOperator(condition bool, res1, res2 string) string

func DeviceCreate

func DeviceCreate(context *VulkanContext) error

func DeviceDestroy

func DeviceDestroy(context *VulkanContext) error

func DeviceDetectDepthFormat

func DeviceDetectDepthFormat(device *VulkanDevice) error

func DeviceQuerySwapchainSupport

func DeviceQuerySwapchainSupport(physicalDevice vk.PhysicalDevice, surface vk.Surface, supportInfo *VulkanSwapchainSupportInfo) error

func FindFirstZeroInByteArray

func FindFirstZeroInByteArray(arr []byte) int

func ImageViewCreate

func ImageViewCreate(context *VulkanContext, textureType metadata.TextureType, format vk.Format, aspectFlags vk.ImageAspectFlags, image *VulkanImage) error

func SelectPhysicalDevice

func SelectPhysicalDevice(context *VulkanContext) error

func SwapchainAcquireNextImageIndex

func SwapchainAcquireNextImageIndex(context *VulkanContext, vs *VulkanSwapchain, timeoutNS uint64, imageAvailableSemaphore vk.Semaphore, fence vk.Fence) (uint32, bool, error)

func SwapchainDestroy

func SwapchainDestroy(context *VulkanContext, vs *VulkanSwapchain) error

func SwapchainPresent

func SwapchainPresent(context *VulkanContext, vs *VulkanSwapchain, graphicsQueue vk.Queue, presentQueue vk.Queue, renderCompleteSemaphore vk.Semaphore, presentImageIndex uint32) error

func VulkanResultIsSuccess

func VulkanResultIsSuccess(result vk.Result) bool

func VulkanResultString

func VulkanResultString(result vk.Result, getExtended bool) string

func VulkanSafeString

func VulkanSafeString(s string) string

func VulkanSafeStrings

func VulkanSafeStrings(list []string) []string

Types

type LockGroup

type LockGroup string
const (
	SamplerManagement         LockGroup = "sampler_management"
	ResourceManagement        LockGroup = "resource_management"
	CommandBufferManagement   LockGroup = "command_buffer_management"
	RenderpassManagement      LockGroup = "renderpass_management"
	BufferManagement          LockGroup = "buffer_management"
	ImageManagement           LockGroup = "image_management"
	DeviceManagement          LockGroup = "device_management"
	CommandPoolManagement     LockGroup = "command_pool_management"
	QueueManagement           LockGroup = "queue_management"
	PipelineManagement        LockGroup = "pipeline_management"
	MemoryManagement          LockGroup = "memory_management"
	ShaderManagement          LockGroup = "shader_management"
	SynchronizationManagement LockGroup = "synchronization_management"
	SwapchainManagement       LockGroup = "swapchain_management"
	InstanceManagement        LockGroup = "instance_management"
)

type VulkanBuffer

type VulkanBuffer struct {
	/** @brief The Handle to the internal buffer. */
	Handle vk.Buffer
	/** @brief The Usage flags. */
	Usage vk.BufferUsageFlags
	/** @brief Indicates if the buffer's memory is currently locked. */
	IsLocked bool
	/** @brief The Memory used by the buffer. */
	Memory vk.DeviceMemory
	/** @brief The memory requirements for this buffer. */
	MemoryRequirements vk.MemoryRequirements
	/** @brief The index of the memory used by the buffer. */
	MemoryIndex int32
	/** @brief The property flags for the memory used by the buffer. */
	MemoryPropertyFlags uint32
}

*

  • @brief Represents a Vulkan-specific buffer.
  • Used to load data onto the GPU.

type VulkanCommandBuffer

type VulkanCommandBuffer struct {
	Handle vk.CommandBuffer
	// Command buffer state.
	State VulkanCommandBufferState
}

func AllocateAndBeginSingleUse

func AllocateAndBeginSingleUse(context *VulkanContext, pool vk.CommandPool) (*VulkanCommandBuffer, error)

*

  • Allocates and begins recording to out_command_buffer.

func NewVulkanCommandBuffer

func NewVulkanCommandBuffer(context *VulkanContext, pool vk.CommandPool, isPrimary bool) (*VulkanCommandBuffer, error)

func (*VulkanCommandBuffer) Begin

func (v *VulkanCommandBuffer) Begin(isSingleUse, isRenderpassContinue, isSimultaneousUse bool) error

func (*VulkanCommandBuffer) End

func (v *VulkanCommandBuffer) End() error

func (*VulkanCommandBuffer) EndSingleUse

func (v *VulkanCommandBuffer) EndSingleUse(context *VulkanContext, pool vk.CommandPool, queue vk.Queue, queueIndex uint32) error

*

  • Ends recording, submits to and waits for queue operation and frees the provided command buffer.

func (*VulkanCommandBuffer) Free

func (v *VulkanCommandBuffer) Free(context *VulkanContext, pool vk.CommandPool) error

func (*VulkanCommandBuffer) Reset

func (v *VulkanCommandBuffer) Reset()

func (*VulkanCommandBuffer) UpdateSubmitted

func (v *VulkanCommandBuffer) UpdateSubmitted()

type VulkanCommandBufferState

type VulkanCommandBufferState int
const (
	COMMAND_BUFFER_STATE_READY VulkanCommandBufferState = iota
	COMMAND_BUFFER_STATE_RECORDING
	COMMAND_BUFFER_STATE_IN_RENDER_PASS
	COMMAND_BUFFER_STATE_RECORDING_ENDED
	COMMAND_BUFFER_STATE_SUBMITTED
	COMMAND_BUFFER_STATE_NOT_ALLOCATED
)

type VulkanContext

type VulkanContext struct {
	/** @brief The time in seconds since the last frame. */
	FrameDeltaTime float32
	// The framebuffer's current width.
	FramebufferWidth uint32
	// The framebuffer's current height.
	FramebufferHeight uint32
	// Current generation of framebuffer size. If it does not match framebuffer_size_last_generation,
	// a new one should be generated.
	FramebufferSizeGeneration uint64
	// The generation of the framebuffer when it was last created. Set to framebuffer_size_generation
	// when updated.
	FramebufferSizeLastGeneration uint64

	Instance  vk.Instance
	Allocator *vk.AllocationCallbacks
	Surface   vk.Surface

	/** @brief The viewport rectangle. */
	ViewportRect math.Vec4

	/** @brief The scissor rectangle. */
	ScissorRect math.Vec4

	Device *VulkanDevice

	Swapchain *VulkanSwapchain

	/** @brief The object vertex buffer, used to hold geometry vertices. */
	ObjectVertexBuffer *metadata.RenderBuffer
	/** @brief The object index buffer, used to hold geometry indices. */
	ObjectIndexBuffer *metadata.RenderBuffer

	GraphicsCommandBuffers   []*VulkanCommandBuffer
	ImageAvailableSemaphores []vk.Semaphore
	QueueCompleteSemaphores  []vk.Semaphore

	InFlightFenceCount uint32
	InFlightFences     []vk.Fence

	// Holds pointers to fences which exist and are owned elsewhere.
	ImagesInFlight []vk.Fence

	ImageIndex   uint32
	CurrentFrame uint32

	RecreatingSwapchain bool

	/** @brief The A collection of loaded Geometries. @todo TODO: make dynamic */
	Geometries []*VulkanGeometryData

	/** @brief Render targets used for world rendering. @note One per frame. */
	WorldRenderTargets [3]metadata.RenderTarget

	/** @brief Indicates if multi-threading is supported by this device. */
	MultithreadingEnabled bool
	// contains filtered or unexported fields
}

func (*VulkanContext) FindMemoryIndex

func (vc *VulkanContext) FindMemoryIndex(typeFilter, propertyFlags uint32) int32

type VulkanDescriptorSetConfig

type VulkanDescriptorSetConfig struct {
	/** @brief The number of bindings in this set. */
	BindingCount uint8
	/** @brief An array of binding layouts for this set. */
	Bindings []vk.DescriptorSetLayoutBinding
	/** @brief The index of the sampler binding. */
	SamplerBindingIndex uint8
}

*

  • @brief The configuration for a descriptor set.

type VulkanDescriptorState

type VulkanDescriptorState struct {
	/** @brief The descriptor generation, per frame. */
	Generations [3]uint8
	/** @brief The identifier, per frame. Typically used for texture IDs. */
	IDs [3]uint32
}

*

  • @brief Represents a state for a given descriptor. This is used
  • to determine when a descriptor needs updating. There is a state
  • per frame (with a max of 3).

type VulkanDevice

type VulkanDevice struct {
	PhysicalDevice     vk.PhysicalDevice
	LogicalDevice      vk.Device
	SwapchainSupport   *VulkanSwapchainSupportInfo
	GraphicsQueueIndex uint32
	PresentQueueIndex  uint32
	TransferQueueIndex uint32

	GraphicsQueue vk.Queue
	PresentQueue  vk.Queue
	TransferQueue vk.Queue

	SupportsDeviceLocalHostVisible bool

	GraphicsCommandPool vk.CommandPool

	Properties vk.PhysicalDeviceProperties
	Features   vk.PhysicalDeviceFeatures
	Memory     vk.PhysicalDeviceMemoryProperties

	DepthFormat       vk.Format
	DepthChannelCount uint8
}

type VulkanFramebuffer

type VulkanFramebuffer struct {
	Handle          vk.Framebuffer
	AttachmentCount uint32
	Attachments     []vk.ImageView
	Renderpass      *VulkanRenderPass
}

type VulkanGeometryData

type VulkanGeometryData struct {
	/** @brief The unique geometry identifier. */
	ID uint32
	/** @brief The geometry Generation. Incremented every time the geometry data changes. */
	Generation uint32
	/** @brief The vertex count. */
	VertexCount uint32
	/** @brief The size of each vertex. */
	VertexElementSize uint32
	/** @brief The offset in bytes in the vertex buffer. */
	VertexBufferOffset uint64
	/** @brief The index count. */
	IndexCount uint32
	/** @brief The size of each index. */
	IndexElementSize uint32
	/** @brief The offset in bytes in the index buffer. */
	IndexBufferOffset uint64
}

*

  • @brief Internal buffer data for geometry. This data gets loaded
  • directly into a buffer.

type VulkanImage

type VulkanImage struct {
	Handle             vk.Image
	Memory             vk.DeviceMemory
	MemoryRequirements vk.MemoryRequirements // The GPU memory requirements for this image
	MemoryFlags        vk.MemoryPropertyFlags
	ImageView          vk.ImageView
	Width              uint32
	Height             uint32
}

func ImageCreate

func ImageCreate(context *VulkanContext, textureType metadata.TextureType, width uint32, height uint32,
	format vk.Format, tiling vk.ImageTiling, usage vk.ImageUsageFlags, memoryFlags vk.MemoryPropertyFlags,
	createView bool, viewAspectFlags vk.ImageAspectFlags) (*VulkanImage, error)

func (*VulkanImage) Destroy

func (vi *VulkanImage) Destroy(context *VulkanContext) error

func (*VulkanImage) ImageCopyFromBuffer

func (image *VulkanImage) ImageCopyFromBuffer(context *VulkanContext, textureType metadata.TextureType, buffer vk.Buffer, commandBuffer *VulkanCommandBuffer) error

func (*VulkanImage) ImageCopyPixelToBuffer

func (vi *VulkanImage) ImageCopyPixelToBuffer(context *VulkanContext, textureType metadata.TextureType, buffer vk.Buffer, x, y uint32, commandBuffer *VulkanCommandBuffer) error

func (*VulkanImage) ImageCopyToBuffer

func (image *VulkanImage) ImageCopyToBuffer(context *VulkanContext, textureType metadata.TextureType, buffer vk.Buffer, commandBuffer *VulkanCommandBuffer) error

func (*VulkanImage) ImageTransitionLayout

func (image *VulkanImage) ImageTransitionLayout(context *VulkanContext, textureType metadata.TextureType, commandBuffer *VulkanCommandBuffer, format vk.Format, oldLayout, newLayout vk.ImageLayout) error

type VulkanLockPool

type VulkanLockPool struct {
	// contains filtered or unexported fields
}

Mutex pool

func NewVulkanLockPool

func NewVulkanLockPool() *VulkanLockPool

Initialize the VulkanSync object

func (*VulkanLockPool) SafeCall

func (vs *VulkanLockPool) SafeCall(group LockGroup, fn func() error) error

func (*VulkanLockPool) SafeQueueCall

func (vs *VulkanLockPool) SafeQueueCall(queueFamilyIndex uint32, fn func() error) error

func (*VulkanLockPool) SetQueueFamily

func (vs *VulkanLockPool) SetQueueFamily(index uint32)

type VulkanPhysicalDeviceQueueFamilyInfo

type VulkanPhysicalDeviceQueueFamilyInfo struct {
	GraphicsFamilyIndex uint32
	PresentFamilyIndex  uint32
	ComputeFamilyIndex  uint32
	TransferFamilyIndex uint32
}

type VulkanPhysicalDeviceRequirements

type VulkanPhysicalDeviceRequirements struct {
	Graphics             bool
	Present              bool
	Compute              bool
	Transfer             bool
	DeviceExtensionNames []string
	SamplerAnisotropy    bool
	DiscreteGPU          bool
}

type VulkanPipeline

type VulkanPipeline struct {
	/** @brief The internal pipeline handle. */
	Handle vk.Pipeline
	/** @brief The pipeline layout. */
	PipelineLayout vk.PipelineLayout
}

*

  • @brief Holds a Vulkan pipeline and its layout.

func NewGraphicsPipeline

func NewGraphicsPipeline(context *VulkanContext, config *VulkanPipelineConfig) (*VulkanPipeline, error)

func (*VulkanPipeline) Bind

func (pipeline *VulkanPipeline) Bind(command_buffer *VulkanCommandBuffer, bind_point vk.PipelineBindPoint) error

func (*VulkanPipeline) Destroy

func (pipeline *VulkanPipeline) Destroy(context *VulkanContext) error

type VulkanPipelineConfig

type VulkanPipelineConfig struct {
	/** @brief A pointer to the renderpass to associate with the pipeline. */
	Renderpass *VulkanRenderPass
	/** @brief The stride of the vertex data to be used (ex: sizeof(vertex_3d)) */
	Stride uint32
	/** @brief An array of attributes. */
	Attributes []vk.VertexInputAttributeDescription
	/** @brief An array of descriptor set layouts. */
	DescriptorSetLayouts []vk.DescriptorSetLayout
	/** @brief An VK_ACCESS_DEPTH_STENCIL_ATTACHMENT_WRITE_BITarray of stages. */
	Stages []vk.PipelineShaderStageCreateInfo
	/** @brief The initial viewport configuration. */
	Viewport vk.Viewport
	/** @brief The initial scissor configuration. */
	Scissor vk.Rect2D
	/** @brief The face cull mode. */
	CullMode metadata.FaceCullMode
	/** @brief Indicates if this pipeline should use wireframe mode. */
	IsWireframe bool
	/** @brief The shader flags used for creating the pipeline. */
	ShaderFlags metadata.ShaderFlagBits
	/** @brief An array of push constant data ranges. */
	PushConstantRanges []*metadata.MemoryRange
}

type VulkanRenderPass

type VulkanRenderPass struct {
	Handle  vk.RenderPass
	Depth   float32
	Stencil uint32
	State   VulkanRenderPassState
}

type VulkanRenderPassState

type VulkanRenderPassState int
const (
	READY VulkanRenderPassState = iota
	RECORDING
	IN_RENDER_PASS
	RECORDING_ENDED
	SUBMITTED
	NOT_ALLOCATED
)

type VulkanRenderer

type VulkanRenderer struct {
	FrameNumber       uint64
	FramebufferWidth  uint32
	FramebufferHeight uint32
	// contains filtered or unexported fields
}

func (*VulkanRenderer) BeginFrame

func (vr *VulkanRenderer) BeginFrame(deltaTime float64) error

func (*VulkanRenderer) CreateGeometry

func (vr *VulkanRenderer) CreateGeometry(geometry *metadata.Geometry, vertex_size, vertexCount uint32, vertices interface{}, index_size uint32, indexCount uint32, indices []uint32) error

func (*VulkanRenderer) DepthAttachmentGet

func (vr *VulkanRenderer) DepthAttachmentGet(index uint8) *metadata.Texture

func (*VulkanRenderer) DestroyGeometry

func (vr *VulkanRenderer) DestroyGeometry(geometry *metadata.Geometry) error

func (*VulkanRenderer) DrawGeometry

func (vr *VulkanRenderer) DrawGeometry(data *metadata.GeometryRenderData) error

func (*VulkanRenderer) EndFrame

func (vr *VulkanRenderer) EndFrame(deltaTime float64) error

func (*VulkanRenderer) GetWindowAttachmentCount

func (vr *VulkanRenderer) GetWindowAttachmentCount() uint8

func (*VulkanRenderer) Initialize

func (vr *VulkanRenderer) Initialize(config *metadata.RendererBackendConfig, windowRenderTargetCount *uint8) error

func (*VulkanRenderer) IsMultithreaded

func (vr *VulkanRenderer) IsMultithreaded() bool

func (*VulkanRenderer) RenderBufferBind

func (vr *VulkanRenderer) RenderBufferBind(buffer *metadata.RenderBuffer, offset uint64) error

func (*VulkanRenderer) RenderBufferCopyRange

func (vr *VulkanRenderer) RenderBufferCopyRange(source *metadata.RenderBuffer, sourceOffset uint64, dest *metadata.RenderBuffer, destOffset uint64, size uint64) error

func (*VulkanRenderer) RenderBufferCreate

func (vr *VulkanRenderer) RenderBufferCreate(renderbufferType metadata.RenderBufferType, totalSize uint64) (*metadata.RenderBuffer, error)

func (*VulkanRenderer) RenderBufferDestroy

func (vr *VulkanRenderer) RenderBufferDestroy(buffer *metadata.RenderBuffer)

func (*VulkanRenderer) RenderBufferDraw

func (vr *VulkanRenderer) RenderBufferDraw(buffer *metadata.RenderBuffer, offset uint64, elementCount uint32, bindOnly bool) error

func (*VulkanRenderer) RenderBufferFlush

func (vr *VulkanRenderer) RenderBufferFlush(buffer *metadata.RenderBuffer, offset, size uint64) error

func (*VulkanRenderer) RenderBufferFree

func (vr *VulkanRenderer) RenderBufferFree(buffer *metadata.RenderBuffer, size, offset uint64) error

func (*VulkanRenderer) RenderBufferLoadRange

func (vr *VulkanRenderer) RenderBufferLoadRange(buffer *metadata.RenderBuffer, offset, size uint64, data interface{}) error

func (*VulkanRenderer) RenderBufferMapMemory

func (vr *VulkanRenderer) RenderBufferMapMemory(buffer *metadata.RenderBuffer, offset, size uint64) (interface{}, error)

func (*VulkanRenderer) RenderBufferRead

func (vr *VulkanRenderer) RenderBufferRead(buffer *metadata.RenderBuffer, offset, size uint64) (interface{}, error)

func (*VulkanRenderer) RenderBufferResize

func (vr *VulkanRenderer) RenderBufferResize(buffer *metadata.RenderBuffer, new_total_size uint64) error

func (*VulkanRenderer) RenderBufferUnbind

func (vr *VulkanRenderer) RenderBufferUnbind(buffer *metadata.RenderBuffer) bool

func (*VulkanRenderer) RenderBufferUnmapMemory

func (vr *VulkanRenderer) RenderBufferUnmapMemory(buffer *metadata.RenderBuffer, offset, size uint64) error

func (*VulkanRenderer) RenderPassBegin

func (vr *VulkanRenderer) RenderPassBegin(pass *metadata.RenderPass, target *metadata.RenderTarget) error

func (*VulkanRenderer) RenderPassCreate

func (vr *VulkanRenderer) RenderPassCreate(config *metadata.RenderPassConfig) (*metadata.RenderPass, error)

func (*VulkanRenderer) RenderPassDestroy

func (vr *VulkanRenderer) RenderPassDestroy(pass *metadata.RenderPass) error

func (*VulkanRenderer) RenderPassEnd

func (vr *VulkanRenderer) RenderPassEnd(pass *metadata.RenderPass) error

func (*VulkanRenderer) RenderTargetCreate

func (vr *VulkanRenderer) RenderTargetCreate(attachmentCount uint8, attachments []*metadata.RenderTargetAttachment, pass *metadata.RenderPass, width, height uint32) (*metadata.RenderTarget, error)

func (*VulkanRenderer) RenderTargetDestroy

func (vr *VulkanRenderer) RenderTargetDestroy(target *metadata.RenderTarget, freeInternalMemory bool) error

func (*VulkanRenderer) ResetScissor

func (vr *VulkanRenderer) ResetScissor()

func (*VulkanRenderer) ResetViewport

func (vr *VulkanRenderer) ResetViewport()

func (*VulkanRenderer) Resized

func (vr *VulkanRenderer) Resized(width, height uint32) error

func (*VulkanRenderer) SetScissor

func (vr *VulkanRenderer) SetScissor() error

func (*VulkanRenderer) SetUniform

func (vr *VulkanRenderer) SetUniform(shader *metadata.Shader, uniform metadata.ShaderUniform, value interface{}) error

func (*VulkanRenderer) SetViewport

func (vr *VulkanRenderer) SetViewport() error

func (*VulkanRenderer) ShaderAcquireInstanceResources

func (vr *VulkanRenderer) ShaderAcquireInstanceResources(shader *metadata.Shader, maps []*metadata.TextureMap) (uint32, error)

func (*VulkanRenderer) ShaderApplyGlobals

func (vr *VulkanRenderer) ShaderApplyGlobals(shader *metadata.Shader) error

func (*VulkanRenderer) ShaderApplyInstance

func (vr *VulkanRenderer) ShaderApplyInstance(shader *metadata.Shader, needsUpdate bool) error

func (*VulkanRenderer) ShaderBindGlobals

func (vr *VulkanRenderer) ShaderBindGlobals(shader *metadata.Shader) error

func (*VulkanRenderer) ShaderBindInstance

func (vr *VulkanRenderer) ShaderBindInstance(shader *metadata.Shader, instance_id uint32) error

func (*VulkanRenderer) ShaderCreate

func (vr *VulkanRenderer) ShaderCreate(shader *metadata.Shader, config *metadata.ShaderConfig, pass *metadata.RenderPass, stageCount uint8, stageFilenames []string, stages []metadata.ShaderStage) error

func (*VulkanRenderer) ShaderDestroy

func (vr *VulkanRenderer) ShaderDestroy(s *metadata.Shader) error

func (*VulkanRenderer) ShaderInitialize

func (vr *VulkanRenderer) ShaderInitialize(shader *metadata.Shader) error

func (*VulkanRenderer) ShaderReleaseInstanceResources

func (vr *VulkanRenderer) ShaderReleaseInstanceResources(shader *metadata.Shader, instance_id uint32) error

func (*VulkanRenderer) ShaderUse

func (vr *VulkanRenderer) ShaderUse(shader *metadata.Shader) error

func (*VulkanRenderer) Shutdow

func (vr *VulkanRenderer) Shutdow() error

func (*VulkanRenderer) TextureCreate

func (vr *VulkanRenderer) TextureCreate(pixels []uint8, texture *metadata.Texture) error

func (*VulkanRenderer) TextureCreateWriteable

func (vr *VulkanRenderer) TextureCreateWriteable(texture *metadata.Texture) error

func (*VulkanRenderer) TextureDestroy

func (vr *VulkanRenderer) TextureDestroy(texture *metadata.Texture) error

func (*VulkanRenderer) TextureMapAcquireResources

func (vr *VulkanRenderer) TextureMapAcquireResources(texture_map *metadata.TextureMap) error

func (*VulkanRenderer) TextureMapReleaseResources

func (vr *VulkanRenderer) TextureMapReleaseResources(texture_map *metadata.TextureMap) error

func (*VulkanRenderer) TextureReadData

func (vr *VulkanRenderer) TextureReadData(texture *metadata.Texture, offset, size uint32) (interface{}, error)

func (*VulkanRenderer) TextureReadPixel

func (vr *VulkanRenderer) TextureReadPixel(texture *metadata.Texture, x, y uint32) ([]uint8, error)

func (*VulkanRenderer) TextureResize

func (vr *VulkanRenderer) TextureResize(texture *metadata.Texture, new_width, new_height uint32) error

func (*VulkanRenderer) TextureWriteData

func (vr *VulkanRenderer) TextureWriteData(texture *metadata.Texture, offset, size uint32, pixels []uint8) error

func (*VulkanRenderer) WindowAttachmentGet

func (vr *VulkanRenderer) WindowAttachmentGet(index uint8) *metadata.Texture

func (*VulkanRenderer) WindowAttachmentIndexGet

func (vr *VulkanRenderer) WindowAttachmentIndexGet() uint64

type VulkanShader

type VulkanShader struct {
	/** @brief The block of memory mapped to the uniform buffer. */
	MappedUniformBufferBlock interface{}

	/** @brief The shader identifier. */
	ID uint32

	/** @brief The configuration of the shader generated by vulkan_create_shader(). */
	Config *VulkanShaderConfig

	/** @brief A pointer to the Renderpass to be used with this shader. */
	Renderpass *VulkanRenderPass

	/** @brief An array of Stages (such as vertex and fragment) for this shader. Count is located in config.*/
	Stages []*VulkanShaderStage

	/** @brief The descriptor pool used for this shader. */
	DescriptorPool vk.DescriptorPool

	/** @brief Descriptor set layouts, max of 2. Index 0=global, 1=instance. */
	DescriptorSetLayouts []vk.DescriptorSetLayout
	/** @brief Global descriptor sets, one per frame. */
	GlobalDescriptorSets []vk.DescriptorSet
	/** @brief The uniform buffer used by this shader. */
	UniformBuffer *metadata.RenderBuffer

	/** @brief The Pipeline associated with this shader. */
	Pipeline *VulkanPipeline

	/** @brief The instance states for all instances. @todo TODO: make dynamic */
	InstanceCount  uint32
	InstanceStates []*VulkanShaderInstanceState

	/** @brief The number of global non-sampler uniforms. */
	GlobalUniformCount uint8
	/** @brief The number of global sampler uniforms. */
	GlobalUniformSamplerCount uint8
	/** @brief The number of instance non-sampler uniforms. */
	InstanceUniformCount uint8
	/** @brief The number of instance sampler uniforms. */
	InstanceUniformSamplerCount uint8
	/** @brief The number of local non-sampler uniforms. */
	LocalUniformCount uint8
}

*

  • @brief Represents a generic Vulkan shader. This uses a set of inputs
  • and parameters, as well as the shader programs contained in SPIR-V
  • files to construct a shader for use in rendering.

type VulkanShaderConfig

type VulkanShaderConfig struct {
	/** @brief  The configuration for every stage of this shader. */
	Stages []*VulkanShaderStageConfig
	/** @brief An array of descriptor pool sizes. */
	PoolSizes []vk.DescriptorPoolSize
	/**
	 * @brief The max number of descriptor sets that can be allocated from this shader.
	 * Should typically be a decently high number.
	 */
	MaxDescriptorSetCount uint16
	/** @brief Descriptor sets, max of 2. Index 0=global, 1=instance */
	DescriptorSets []*VulkanDescriptorSetConfig
	/** @brief An array of attribute descriptions for this shader. */
	Attributes []vk.VertexInputAttributeDescription
	/** @brief Face culling mode, provided by the front end. */
	CullMode metadata.FaceCullMode
}

* @brief Internal shader configuration generated by vulkan_shader_create().

type VulkanShaderDescriptorSetState

type VulkanShaderDescriptorSetState struct {
	/** @brief The descriptor sets for this instance, one per frame. */
	DescriptorSets []vk.DescriptorSet
	/** @brief A descriptor state per descriptor, which in turn handles frames. Count is managed in shader config. */
	DescriptorStates []*VulkanDescriptorState
}

*

  • @brief Represents the state for a descriptor set. This is used to track
  • generations and updates, potentially for optimization via skipping
  • sets which do not need updating.

type VulkanShaderInstanceState

type VulkanShaderInstanceState struct {
	/** @brief The instance ID. INVALID_ID if not used. */
	ID uint32
	/** @brief The Offset in bytes in the instance uniform buffer. */
	Offset uint64
	/** @brief  A state for the descriptor set. */
	DescriptorSetState *VulkanShaderDescriptorSetState
	/**
	 * @brief Instance texture map pointers, which are used during rendering. These
	 * are set by calls to set_sampler.
	 */
	InstanceTextureMaps []*metadata.TextureMap
}

*

  • @brief The instance-level state for a shader.

type VulkanShaderStage

type VulkanShaderStage struct {
	/** @brief The shader module creation info. */
	CreateInfo vk.ShaderModuleCreateInfo
	/** @brief The internal shader module Handle. */
	Handle vk.ShaderModule
	/** @brief The pipeline shader stage creation info. */
	ShaderStageCreateInfo vk.PipelineShaderStageCreateInfo
}

*

  • @brief Represents a single shader stage.

type VulkanShaderStageConfig

type VulkanShaderStageConfig struct {
	/** @brief The shader Stage bit flag. */
	Stage vk.ShaderStageFlagBits
	/** @brief The shader file name. */
	FileName string
}

*

  • @brief Configuration for a shader stage, such as vertex or fragment.

type VulkanSwapchain

type VulkanSwapchain struct {
	ImageFormat       vk.SurfaceFormat
	MaxFramesInFlight uint8
	Handle            vk.Swapchain
	ImageCount        uint32

	RenderTextures []*metadata.Texture
	DepthTextures  []*metadata.Texture
}

func SwapchainCreate

func SwapchainCreate(context *VulkanContext, width uint32, height uint32) (*VulkanSwapchain, error)

func SwapchainRecreate

func SwapchainRecreate(context *VulkanContext, vs *VulkanSwapchain, width uint32, height uint32) (*VulkanSwapchain, error)

type VulkanSwapchainSupportInfo

type VulkanSwapchainSupportInfo struct {
	Capabilities     vk.SurfaceCapabilities
	FormatCount      uint32
	Formats          []vk.SurfaceFormat
	PresentModeCount uint32
	PresentModes     []vk.PresentMode
}

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL