Documentation
¶
Index ¶
- Constants
- func ConditionalOperator(condition bool, res1, res2 string) string
- func DeviceCreate(context *VulkanContext) error
- func DeviceDestroy(context *VulkanContext) error
- func DeviceDetectDepthFormat(device *VulkanDevice) error
- func DeviceQuerySwapchainSupport(physicalDevice vk.PhysicalDevice, surface vk.Surface, ...) error
- func FindFirstZeroInByteArray(arr []byte) int
- func ImageViewCreate(context *VulkanContext, textureType metadata.TextureType, format vk.Format, ...) error
- func PhysicalDeviceMeetsRequirements(device vk.PhysicalDevice, surface vk.Surface, ...) (*VulkanPhysicalDeviceQueueFamilyInfo, *VulkanSwapchainSupportInfo, error)
- func SelectPhysicalDevice(context *VulkanContext) error
- func SwapchainAcquireNextImageIndex(context *VulkanContext, vs *VulkanSwapchain, timeoutNS uint64, ...) (uint32, bool, error)
- func SwapchainDestroy(context *VulkanContext, vs *VulkanSwapchain) error
- func SwapchainPresent(context *VulkanContext, vs *VulkanSwapchain, graphicsQueue vk.Queue, ...) error
- func VulkanResultIsSuccess(result vk.Result) bool
- func VulkanResultString(result vk.Result, getExtended bool) string
- func VulkanSafeString(s string) string
- func VulkanSafeStrings(list []string) []string
- type LockGroup
- type VulkanBuffer
- type VulkanCommandBuffer
- func (v *VulkanCommandBuffer) Begin(isSingleUse, isRenderpassContinue, isSimultaneousUse bool) error
- func (v *VulkanCommandBuffer) End() error
- func (v *VulkanCommandBuffer) EndSingleUse(context *VulkanContext, pool vk.CommandPool, queue vk.Queue, queueIndex uint32) error
- func (v *VulkanCommandBuffer) Free(context *VulkanContext, pool vk.CommandPool) error
- func (v *VulkanCommandBuffer) Reset()
- func (v *VulkanCommandBuffer) UpdateSubmitted()
- type VulkanCommandBufferState
- type VulkanContext
- type VulkanDescriptorSetConfig
- type VulkanDescriptorState
- type VulkanDevice
- type VulkanFramebuffer
- type VulkanGeometryData
- type VulkanImage
- func (vi *VulkanImage) Destroy(context *VulkanContext) error
- func (image *VulkanImage) ImageCopyFromBuffer(context *VulkanContext, textureType metadata.TextureType, buffer vk.Buffer, ...) error
- func (vi *VulkanImage) ImageCopyPixelToBuffer(context *VulkanContext, textureType metadata.TextureType, buffer vk.Buffer, ...) error
- func (image *VulkanImage) ImageCopyToBuffer(context *VulkanContext, textureType metadata.TextureType, buffer vk.Buffer, ...) error
- func (image *VulkanImage) ImageTransitionLayout(context *VulkanContext, textureType metadata.TextureType, ...) error
- type VulkanLockPool
- type VulkanPhysicalDeviceQueueFamilyInfo
- type VulkanPhysicalDeviceRequirements
- type VulkanPipeline
- type VulkanPipelineConfig
- type VulkanRenderPass
- type VulkanRenderPassState
- type VulkanRenderer
- func (vr *VulkanRenderer) BeginFrame(deltaTime float64) error
- func (vr *VulkanRenderer) CreateGeometry(geometry *metadata.Geometry, vertex_size, vertexCount uint32, ...) error
- func (vr *VulkanRenderer) DepthAttachmentGet(index uint8) *metadata.Texture
- func (vr *VulkanRenderer) DestroyGeometry(geometry *metadata.Geometry) error
- func (vr *VulkanRenderer) DrawGeometry(data *metadata.GeometryRenderData) error
- func (vr *VulkanRenderer) EndFrame(deltaTime float64) error
- func (vr *VulkanRenderer) GetWindowAttachmentCount() uint8
- func (vr *VulkanRenderer) Initialize(config *metadata.RendererBackendConfig, windowRenderTargetCount *uint8) error
- func (vr *VulkanRenderer) IsMultithreaded() bool
- func (vr *VulkanRenderer) RenderBufferBind(buffer *metadata.RenderBuffer, offset uint64) error
- func (vr *VulkanRenderer) RenderBufferCopyRange(source *metadata.RenderBuffer, sourceOffset uint64, ...) error
- func (vr *VulkanRenderer) RenderBufferCreate(renderbufferType metadata.RenderBufferType, totalSize uint64) (*metadata.RenderBuffer, error)
- func (vr *VulkanRenderer) RenderBufferDestroy(buffer *metadata.RenderBuffer)
- func (vr *VulkanRenderer) RenderBufferDraw(buffer *metadata.RenderBuffer, offset uint64, elementCount uint32, ...) error
- func (vr *VulkanRenderer) RenderBufferFlush(buffer *metadata.RenderBuffer, offset, size uint64) error
- func (vr *VulkanRenderer) RenderBufferFree(buffer *metadata.RenderBuffer, size, offset uint64) error
- func (vr *VulkanRenderer) RenderBufferLoadRange(buffer *metadata.RenderBuffer, offset, size uint64, data interface{}) error
- func (vr *VulkanRenderer) RenderBufferMapMemory(buffer *metadata.RenderBuffer, offset, size uint64) (interface{}, error)
- func (vr *VulkanRenderer) RenderBufferRead(buffer *metadata.RenderBuffer, offset, size uint64) (interface{}, error)
- func (vr *VulkanRenderer) RenderBufferResize(buffer *metadata.RenderBuffer, new_total_size uint64) error
- func (vr *VulkanRenderer) RenderBufferUnbind(buffer *metadata.RenderBuffer) bool
- func (vr *VulkanRenderer) RenderBufferUnmapMemory(buffer *metadata.RenderBuffer, offset, size uint64) error
- func (vr *VulkanRenderer) RenderPassBegin(pass *metadata.RenderPass, target *metadata.RenderTarget) error
- func (vr *VulkanRenderer) RenderPassCreate(config *metadata.RenderPassConfig) (*metadata.RenderPass, error)
- func (vr *VulkanRenderer) RenderPassDestroy(pass *metadata.RenderPass) error
- func (vr *VulkanRenderer) RenderPassEnd(pass *metadata.RenderPass) error
- func (vr *VulkanRenderer) RenderTargetCreate(attachmentCount uint8, attachments []*metadata.RenderTargetAttachment, ...) (*metadata.RenderTarget, error)
- func (vr *VulkanRenderer) RenderTargetDestroy(target *metadata.RenderTarget, freeInternalMemory bool) error
- func (vr *VulkanRenderer) ResetScissor()
- func (vr *VulkanRenderer) ResetViewport()
- func (vr *VulkanRenderer) Resized(width, height uint32) error
- func (vr *VulkanRenderer) SetScissor() error
- func (vr *VulkanRenderer) SetUniform(shader *metadata.Shader, uniform metadata.ShaderUniform, value interface{}) error
- func (vr *VulkanRenderer) SetViewport() error
- func (vr *VulkanRenderer) ShaderAcquireInstanceResources(shader *metadata.Shader, maps []*metadata.TextureMap) (uint32, error)
- func (vr *VulkanRenderer) ShaderApplyGlobals(shader *metadata.Shader) error
- func (vr *VulkanRenderer) ShaderApplyInstance(shader *metadata.Shader, needsUpdate bool) error
- func (vr *VulkanRenderer) ShaderBindGlobals(shader *metadata.Shader) error
- func (vr *VulkanRenderer) ShaderBindInstance(shader *metadata.Shader, instance_id uint32) error
- func (vr *VulkanRenderer) ShaderCreate(shader *metadata.Shader, config *metadata.ShaderConfig, ...) error
- func (vr *VulkanRenderer) ShaderDestroy(s *metadata.Shader) error
- func (vr *VulkanRenderer) ShaderInitialize(shader *metadata.Shader) error
- func (vr *VulkanRenderer) ShaderReleaseInstanceResources(shader *metadata.Shader, instance_id uint32) error
- func (vr *VulkanRenderer) ShaderUse(shader *metadata.Shader) error
- func (vr *VulkanRenderer) Shutdow() error
- func (vr *VulkanRenderer) TextureCreate(pixels []uint8, texture *metadata.Texture) error
- func (vr *VulkanRenderer) TextureCreateWriteable(texture *metadata.Texture) error
- func (vr *VulkanRenderer) TextureDestroy(texture *metadata.Texture) error
- func (vr *VulkanRenderer) TextureMapAcquireResources(texture_map *metadata.TextureMap) error
- func (vr *VulkanRenderer) TextureMapReleaseResources(texture_map *metadata.TextureMap) error
- func (vr *VulkanRenderer) TextureReadData(texture *metadata.Texture, offset, size uint32) (interface{}, error)
- func (vr *VulkanRenderer) TextureReadPixel(texture *metadata.Texture, x, y uint32) ([]uint8, error)
- func (vr *VulkanRenderer) TextureResize(texture *metadata.Texture, new_width, new_height uint32) error
- func (vr *VulkanRenderer) TextureWriteData(texture *metadata.Texture, offset, size uint32, pixels []uint8) error
- func (vr *VulkanRenderer) WindowAttachmentGet(index uint8) *metadata.Texture
- func (vr *VulkanRenderer) WindowAttachmentIndexGet() uint64
- type VulkanShader
- type VulkanShaderConfig
- type VulkanShaderDescriptorSetState
- type VulkanShaderInstanceState
- type VulkanShaderStage
- type VulkanShaderStageConfig
- type VulkanSwapchain
- type VulkanSwapchainSupportInfo
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 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 ImageViewCreate ¶
func ImageViewCreate(context *VulkanContext, textureType metadata.TextureType, format vk.Format, aspectFlags vk.ImageAspectFlags, image *VulkanImage) error
func PhysicalDeviceMeetsRequirements ¶
func PhysicalDeviceMeetsRequirements(device vk.PhysicalDevice, surface vk.Surface, properties *vk.PhysicalDeviceProperties, features *vk.PhysicalDeviceFeatures, requirements *VulkanPhysicalDeviceRequirements) (*VulkanPhysicalDeviceQueueFamilyInfo, *VulkanSwapchainSupportInfo, 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 VulkanSafeString ¶
func VulkanSafeStrings ¶
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 (*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 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 New ¶
func New(p *platform.Platform, am *assets.AssetManager) *VulkanRenderer
func (*VulkanRenderer) BeginFrame ¶
func (vr *VulkanRenderer) BeginFrame(deltaTime float64) error
func (*VulkanRenderer) CreateGeometry ¶
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 (*VulkanRenderer) TextureResize ¶
func (vr *VulkanRenderer) TextureResize(texture *metadata.Texture, new_width, new_height uint32) error
func (*VulkanRenderer) TextureWriteData ¶
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
}
Click to show internal directories.
Click to hide internal directories.