forked from MoonsideGames/Refresh
				
			Compare commits
	
		
			10 Commits 
		
	
	
		
			1f9f7e0939
			...
			9da16f94e1
		
	
	| Author | SHA1 | Date | 
|---|---|---|
|  | 9da16f94e1 | |
|  | 172fa83417 | |
|  | a3949528eb | |
|  | f55968814f | |
|  | c978df6275 | |
|  | de42163673 | |
|  | 4f412b5c15 | |
|  | c3a5d9f417 | |
|  | 9631dc9f83 | |
|  | 5a2b07097a | 
|  | @ -8,7 +8,7 @@ option(BUILD_SHARED_LIBS "Build shared library" ON) | |||
| 
 | ||||
| # Version | ||||
| SET(LIB_MAJOR_VERSION "1") | ||||
| SET(LIB_MINOR_VERSION "13") | ||||
| SET(LIB_MINOR_VERSION "15") | ||||
| SET(LIB_REVISION "0") | ||||
| SET(LIB_VERSION "${LIB_MAJOR_VERSION}.${LIB_MINOR_VERSION}.${LIB_REVISION}") | ||||
| 
 | ||||
|  | @ -41,6 +41,12 @@ add_definitions( | |||
| 	-DREFRESH_DRIVER_VULKAN | ||||
| ) | ||||
| 
 | ||||
| if (WIN32) | ||||
| 	add_definitions( | ||||
| 		-DREFRESH_DRIVER_D3D11 | ||||
| 	) | ||||
| endif() | ||||
| 
 | ||||
| # Source lists | ||||
| add_library(Refresh | ||||
| 	# Public Headers | ||||
|  | @ -51,6 +57,7 @@ add_library(Refresh | |||
| 	src/Refresh_Driver_Vulkan_vkfuncs.h | ||||
| 	# Source Files | ||||
| 	src/Refresh.c | ||||
| 	src/Refresh_Driver_D3D11.c | ||||
| 	src/Refresh_Driver_Vulkan.c | ||||
| 	src/Refresh_Image.c | ||||
| ) | ||||
|  |  | |||
|  | @ -55,7 +55,7 @@ extern "C" { | |||
| /* Version API */ | ||||
| 
 | ||||
| #define REFRESH_MAJOR_VERSION   1 | ||||
| #define REFRESH_MINOR_VERSION	13 | ||||
| #define REFRESH_MINOR_VERSION	15 | ||||
| #define REFRESH_PATCH_VERSION	0 | ||||
| 
 | ||||
| #define REFRESH_COMPILED_VERSION ( \ | ||||
|  | @ -76,6 +76,7 @@ typedef struct Refresh_ShaderModule Refresh_ShaderModule; | |||
| typedef struct Refresh_ComputePipeline Refresh_ComputePipeline; | ||||
| typedef struct Refresh_GraphicsPipeline Refresh_GraphicsPipeline; | ||||
| typedef struct Refresh_CommandBuffer Refresh_CommandBuffer; | ||||
| typedef struct Refresh_Fence Refresh_Fence; | ||||
| 
 | ||||
| typedef enum Refresh_PresentMode | ||||
| { | ||||
|  | @ -329,6 +330,7 @@ typedef enum Refresh_Backend | |||
| { | ||||
| 	REFRESH_BACKEND_DONTCARE, | ||||
| 	REFRESH_BACKEND_VULKAN, | ||||
| 	REFRESH_BACKEND_D3D11, | ||||
| 	REFRESH_BACKEND_PS5, | ||||
| 	REFRESH_BACKEND_INVALID | ||||
| } Refresh_Backend; | ||||
|  | @ -778,15 +780,20 @@ REFRESHAPI void Refresh_SetTextureData( | |||
| 
 | ||||
| /* Uploads YUV image data to three R8 texture objects.
 | ||||
|  * | ||||
|  * y:		The texture storing the Y data. | ||||
|  * u:		The texture storing the U (Cb) data. | ||||
|  * v:		The texture storing the V (Cr) data. | ||||
|  * yWidth:	The width of the Y plane. | ||||
|  * yHeight:	The height of the Y plane. | ||||
|  * uvWidth:	The width of the U/V planes. | ||||
|  * uvHeight:	The height of the U/V planes. | ||||
|  * data:	A pointer to the raw YUV image data. | ||||
|  * dataLength:	The size of the image data in bytes. | ||||
|  * y:            The texture storing the Y data. | ||||
|  * u:            The texture storing the U (Cb) data. | ||||
|  * v:            The texture storing the V (Cr) data. | ||||
|  * yWidth:       The width of the Y plane. | ||||
|  * yHeight:      The height of the Y plane. | ||||
|  * uvWidth:      The width of the U/V planes. | ||||
|  * uvHeight:     The height of the U/V planes. | ||||
|  * yData:        A pointer to the raw Y image data. | ||||
|  * uData:        A pointer to the raw U image data. | ||||
|  * vData:        A pointer to the raw V image data. | ||||
|  * yDataLength:  The size of the Y image data in bytes. | ||||
|  * uvDataLength: The size of the UV image data in bytes. | ||||
|  * yStride:      The length of a Y image data row in bytes. | ||||
|  * uvStride:     The length of a UV image data row in bytes. | ||||
|  */ | ||||
| REFRESHAPI void Refresh_SetTextureDataYUV( | ||||
| 	Refresh_Device *driverData, | ||||
|  | @ -798,8 +805,13 @@ REFRESHAPI void Refresh_SetTextureDataYUV( | |||
| 	uint32_t yHeight, | ||||
| 	uint32_t uvWidth, | ||||
| 	uint32_t uvHeight, | ||||
| 	void* data, | ||||
| 	uint32_t dataLength | ||||
| 	void *yDataPtr, | ||||
| 	void *uDataPtr, | ||||
| 	void *vDataPtr, | ||||
| 	uint32_t yDataLength, | ||||
| 	uint32_t uvDataLength, | ||||
| 	uint32_t yStride, | ||||
| 	uint32_t uvStride | ||||
| ); | ||||
| 
 | ||||
| /* Performs an asynchronous texture-to-texture copy.
 | ||||
|  | @ -1196,15 +1208,50 @@ REFRESHAPI Refresh_Texture* Refresh_AcquireSwapchainTexture( | |||
| /* Submits all of the enqueued commands. */ | ||||
| REFRESHAPI void Refresh_Submit( | ||||
| 	Refresh_Device* device, | ||||
| 	uint32_t commandBufferCount, | ||||
| 	Refresh_CommandBuffer **pCommandBuffers | ||||
| 	Refresh_CommandBuffer *commandBuffer | ||||
| ); | ||||
| 
 | ||||
| /* Waits for all submissions to complete. */ | ||||
| /* Submits a command buffer and acquires a fence.
 | ||||
|  * You can use the fence to check if or wait until the command buffer has finished processing. | ||||
|  * You are responsible for releasing this fence when you are done using it. | ||||
|  */ | ||||
| REFRESHAPI Refresh_Fence* Refresh_SubmitAndAcquireFence( | ||||
| 	Refresh_Device* device, | ||||
| 	Refresh_CommandBuffer *commandBuffer | ||||
| ); | ||||
| 
 | ||||
| /* Waits for the device to become idle. */ | ||||
| REFRESHAPI void Refresh_Wait( | ||||
| 	Refresh_Device *device | ||||
| ); | ||||
| 
 | ||||
| /* Waits for given fences to be signaled.
 | ||||
|  * | ||||
|  * waitAll: If 0, waits for any fence to be signaled. If 1, waits for all fences to be signaled. | ||||
|  * fenceCount: The number of fences being submitted. | ||||
|  * pFences: An array of fences to be waited on. | ||||
|  */ | ||||
| REFRESHAPI void Refresh_WaitForFences( | ||||
| 	Refresh_Device *device, | ||||
| 	uint8_t waitAll, | ||||
| 	uint32_t fenceCount, | ||||
| 	Refresh_Fence **pFences | ||||
| ); | ||||
| 
 | ||||
| /* Check the status of a fence. 1 means the fence is signaled. */ | ||||
| REFRESHAPI int Refresh_QueryFence( | ||||
| 	Refresh_Device *device, | ||||
| 	Refresh_Fence *fence | ||||
| ); | ||||
| 
 | ||||
| /* Allows the fence to be reused by future command buffer submissions.
 | ||||
|  * If you do not release fences after acquiring them, you will cause unbounded resource growth. | ||||
|  */ | ||||
| REFRESHAPI void Refresh_ReleaseFence( | ||||
| 	Refresh_Device *device, | ||||
| 	Refresh_Fence *fence | ||||
| ); | ||||
| 
 | ||||
| #ifdef __cplusplus | ||||
| } | ||||
| #endif /* __cplusplus */ | ||||
|  |  | |||
|  | @ -238,7 +238,7 @@ partial class Program | |||
| 	{ | ||||
| 		Process glslc = Process.Start( | ||||
| 			"glslc", | ||||
| 			$"{glslPath} -o {outputPath}" | ||||
| 			$"""{glslPath}"" -o ""{outputPath}""" | ||||
| 		); | ||||
| 		glslc.WaitForExit(); | ||||
| 		if (glslc.ExitCode != 0) | ||||
|  | @ -254,7 +254,7 @@ partial class Program | |||
| 	{ | ||||
| 		Process spirvcross = Process.Start( | ||||
| 			"spirv-cross", | ||||
| 			$"{spirvPath} --hlsl --shader-model 50 --output {outputPath}" | ||||
| 			$"""{spirvPath}"" --hlsl --shader-model 50 --output ""{outputPath}""" | ||||
| 		); | ||||
| 		spirvcross.WaitForExit(); | ||||
| 		if (spirvcross.ExitCode != 0) | ||||
|  |  | |||
|  | @ -39,6 +39,12 @@ | |||
| 	#define VULKAN_DRIVER NULL | ||||
| #endif | ||||
| 
 | ||||
| #ifdef REFRESH_DRIVER_D3D11 | ||||
| 	#define D3D11_DRIVER &D3D11Driver | ||||
| #else | ||||
| 	#define D3D11_DRIVER NULL | ||||
| #endif | ||||
| 
 | ||||
| #ifdef REFRESH_DRIVER_PS5 | ||||
| 	#define PS5_DRIVER &PS5Driver | ||||
| #else | ||||
|  | @ -47,6 +53,7 @@ | |||
| 
 | ||||
| static const Refresh_Driver *backends[] = { | ||||
| 	NULL, | ||||
| 	D3D11_DRIVER, | ||||
| 	VULKAN_DRIVER, | ||||
| 	PS5_DRIVER | ||||
| }; | ||||
|  | @ -438,8 +445,13 @@ void Refresh_SetTextureDataYUV( | |||
| 	uint32_t yHeight, | ||||
| 	uint32_t uvWidth, | ||||
| 	uint32_t uvHeight, | ||||
| 	void* data, | ||||
| 	uint32_t dataLength | ||||
| 	void *yDataPtr, | ||||
| 	void *uDataPtr, | ||||
| 	void *vDataPtr, | ||||
| 	uint32_t yDataLength, | ||||
| 	uint32_t uvDataLength, | ||||
| 	uint32_t yStride, | ||||
| 	uint32_t uvStride | ||||
| ) { | ||||
| 	NULL_RETURN(device); | ||||
| 	device->SetTextureDataYUV( | ||||
|  | @ -452,8 +464,13 @@ void Refresh_SetTextureDataYUV( | |||
| 		yHeight, | ||||
| 		uvWidth, | ||||
| 		uvHeight, | ||||
| 		data, | ||||
| 		dataLength | ||||
| 		yDataPtr, | ||||
| 		uDataPtr, | ||||
| 		vDataPtr, | ||||
| 		yDataLength, | ||||
| 		uvDataLength, | ||||
| 		yStride, | ||||
| 		uvStride | ||||
| 	); | ||||
| } | ||||
| 
 | ||||
|  | @ -882,14 +899,23 @@ void Refresh_SetSwapchainPresentMode( | |||
| 
 | ||||
| void Refresh_Submit( | ||||
| 	Refresh_Device *device, | ||||
| 	uint32_t commandBufferCount, | ||||
| 	Refresh_CommandBuffer **pCommandBuffers | ||||
| 	Refresh_CommandBuffer *commandBuffer | ||||
| ) { | ||||
| 	NULL_RETURN(device); | ||||
| 	device->Submit( | ||||
| 		device->driverData, | ||||
| 		commandBufferCount, | ||||
| 		pCommandBuffers | ||||
| 		commandBuffer | ||||
| 	); | ||||
| } | ||||
| 
 | ||||
| Refresh_Fence* Refresh_SubmitAndAcquireFence( | ||||
| 	Refresh_Device *device, | ||||
| 	Refresh_CommandBuffer *commandBuffer | ||||
| ) { | ||||
| 	NULL_RETURN_NULL(device); | ||||
| 	return device->SubmitAndAcquireFence( | ||||
| 		device->driverData, | ||||
| 		commandBuffer | ||||
| 	); | ||||
| } | ||||
| 
 | ||||
|  | @ -902,4 +928,44 @@ void Refresh_Wait( | |||
| 	); | ||||
| } | ||||
| 
 | ||||
| void Refresh_WaitForFences( | ||||
| 	Refresh_Device *device, | ||||
| 	uint8_t waitAll, | ||||
| 	uint32_t fenceCount, | ||||
| 	Refresh_Fence **pFences | ||||
| ) { | ||||
| 	NULL_RETURN(device); | ||||
| 	device->WaitForFences( | ||||
| 		device->driverData, | ||||
| 		waitAll, | ||||
| 		fenceCount, | ||||
| 		pFences | ||||
| 	); | ||||
| } | ||||
| 
 | ||||
| int Refresh_QueryFence( | ||||
| 	Refresh_Device *device, | ||||
| 	Refresh_Fence *fence | ||||
| ) { | ||||
| 	if (device == NULL) { | ||||
| 		return 0; | ||||
| 	} | ||||
| 
 | ||||
| 	return device->QueryFence( | ||||
| 		device->driverData, | ||||
| 		fence | ||||
| 	); | ||||
| } | ||||
| 
 | ||||
| void Refresh_ReleaseFence( | ||||
| 	Refresh_Device *device, | ||||
| 	Refresh_Fence *fence | ||||
| ) { | ||||
| 	NULL_RETURN(device); | ||||
| 	device->ReleaseFence( | ||||
| 		device->driverData, | ||||
| 		fence | ||||
| 	); | ||||
| } | ||||
| 
 | ||||
| /* vim: set noexpandtab shiftwidth=8 tabstop=8: */ | ||||
|  |  | |||
|  | @ -268,7 +268,7 @@ struct Refresh_Device | |||
| 
 | ||||
| 	/* Setters */ | ||||
| 
 | ||||
| 	void(*SetTextureData)( | ||||
| 	void (*SetTextureData)( | ||||
| 		Refresh_Renderer *driverData, | ||||
| 		Refresh_CommandBuffer *commandBuffer, | ||||
| 		Refresh_TextureSlice *textureSlice, | ||||
|  | @ -276,7 +276,7 @@ struct Refresh_Device | |||
| 		uint32_t dataLengthInBytes | ||||
| 	); | ||||
| 
 | ||||
| 	void(*SetTextureDataYUV)( | ||||
| 	void (*SetTextureDataYUV)( | ||||
| 		Refresh_Renderer *driverData, | ||||
| 		Refresh_CommandBuffer* commandBuffer, | ||||
| 		Refresh_Texture *y, | ||||
|  | @ -286,11 +286,16 @@ struct Refresh_Device | |||
| 		uint32_t yHeight, | ||||
| 		uint32_t uvWidth, | ||||
| 		uint32_t uvHeight, | ||||
| 		void* data, | ||||
| 		uint32_t dataLength | ||||
| 		void *yDataPtr, | ||||
| 		void *uDataPtr, | ||||
| 		void *vDataPtr, | ||||
| 		uint32_t yDataLength, | ||||
| 		uint32_t uvDataLength, | ||||
| 		uint32_t yStride, | ||||
| 		uint32_t uvStride | ||||
| 	); | ||||
| 
 | ||||
| 	void(*CopyTextureToTexture)( | ||||
| 	void (*CopyTextureToTexture)( | ||||
| 		Refresh_Renderer *driverData, | ||||
| 		Refresh_CommandBuffer *commandBuffer, | ||||
| 		Refresh_TextureSlice *sourceTextureSlice, | ||||
|  | @ -298,14 +303,14 @@ struct Refresh_Device | |||
| 		Refresh_Filter filter | ||||
| 	); | ||||
| 
 | ||||
| 	void(*CopyTextureToBuffer)( | ||||
| 	void (*CopyTextureToBuffer)( | ||||
| 		Refresh_Renderer *driverData, | ||||
| 		Refresh_CommandBuffer *commandBuffer, | ||||
| 		Refresh_TextureSlice *textureSlice, | ||||
| 		Refresh_Buffer *buffer | ||||
| 	); | ||||
| 
 | ||||
| 	void(*SetBufferData)( | ||||
| 	void (*SetBufferData)( | ||||
| 		Refresh_Renderer *driverData, | ||||
| 		Refresh_CommandBuffer *commandBuffer, | ||||
| 		Refresh_Buffer *buffer, | ||||
|  | @ -314,14 +319,14 @@ struct Refresh_Device | |||
| 		uint32_t dataLength | ||||
| 	); | ||||
| 
 | ||||
| 	uint32_t(*PushVertexShaderUniforms)( | ||||
| 	uint32_t (*PushVertexShaderUniforms)( | ||||
| 		Refresh_Renderer *driverData, | ||||
| 		Refresh_CommandBuffer *commandBuffer, | ||||
| 		void *data, | ||||
| 		uint32_t dataLengthInBytes | ||||
| 	); | ||||
| 
 | ||||
| 	uint32_t(*PushFragmentShaderUniforms)( | ||||
| 	uint32_t (*PushFragmentShaderUniforms)( | ||||
| 		Refresh_Renderer *driverData, | ||||
| 		Refresh_CommandBuffer *commandBuffer, | ||||
| 		void *data, | ||||
|  | @ -335,14 +340,14 @@ struct Refresh_Device | |||
| 		uint32_t dataLengthInBytes | ||||
| 	); | ||||
| 
 | ||||
| 	void(*BindVertexSamplers)( | ||||
| 	void (*BindVertexSamplers)( | ||||
| 		Refresh_Renderer *driverData, | ||||
| 		Refresh_CommandBuffer *commandBuffer, | ||||
| 		Refresh_Texture **pTextures, | ||||
| 		Refresh_Sampler **pSamplers | ||||
| 	); | ||||
| 
 | ||||
| 	void(*BindFragmentSamplers)( | ||||
| 	void (*BindFragmentSamplers)( | ||||
| 		Refresh_Renderer *driverData, | ||||
| 		Refresh_CommandBuffer *commandBuffer, | ||||
| 		Refresh_Texture **pTextures, | ||||
|  | @ -351,7 +356,7 @@ struct Refresh_Device | |||
| 
 | ||||
| 	/* Getters */ | ||||
| 
 | ||||
| 	void(*GetBufferData)( | ||||
| 	void (*GetBufferData)( | ||||
| 		Refresh_Renderer *driverData, | ||||
| 		Refresh_Buffer *buffer, | ||||
| 		void *data, | ||||
|  | @ -360,39 +365,39 @@ struct Refresh_Device | |||
| 
 | ||||
| 	/* Disposal */ | ||||
| 
 | ||||
| 	void(*QueueDestroyTexture)( | ||||
| 	void (*QueueDestroyTexture)( | ||||
| 		Refresh_Renderer *driverData, | ||||
| 		Refresh_Texture *texture | ||||
| 	); | ||||
| 
 | ||||
| 	void(*QueueDestroySampler)( | ||||
| 	void (*QueueDestroySampler)( | ||||
| 		Refresh_Renderer *driverData, | ||||
| 		Refresh_Sampler *sampler | ||||
| 	); | ||||
| 
 | ||||
| 	void(*QueueDestroyBuffer)( | ||||
| 	void (*QueueDestroyBuffer)( | ||||
| 		Refresh_Renderer *driverData, | ||||
| 		Refresh_Buffer *buffer | ||||
| 	); | ||||
| 
 | ||||
| 	void(*QueueDestroyShaderModule)( | ||||
| 	void (*QueueDestroyShaderModule)( | ||||
| 		Refresh_Renderer *driverData, | ||||
| 		Refresh_ShaderModule *shaderModule | ||||
| 	); | ||||
| 
 | ||||
| 	void(*QueueDestroyComputePipeline)( | ||||
| 	void (*QueueDestroyComputePipeline)( | ||||
| 		Refresh_Renderer *driverData, | ||||
| 		Refresh_ComputePipeline *computePipeline | ||||
| 	); | ||||
| 
 | ||||
| 	void(*QueueDestroyGraphicsPipeline)( | ||||
| 	void (*QueueDestroyGraphicsPipeline)( | ||||
| 		Refresh_Renderer *driverData, | ||||
| 		Refresh_GraphicsPipeline *graphicsPipeline | ||||
| 	); | ||||
| 
 | ||||
| 	/* Graphics State */ | ||||
| 
 | ||||
| 	void(*BeginRenderPass)( | ||||
| 	void (*BeginRenderPass)( | ||||
| 		Refresh_Renderer *driverData, | ||||
| 		Refresh_CommandBuffer *commandBuffer, | ||||
| 		Refresh_ColorAttachmentInfo *colorAttachmentInfos, | ||||
|  | @ -400,30 +405,30 @@ struct Refresh_Device | |||
| 		Refresh_DepthStencilAttachmentInfo *depthStencilAttachmentInfo | ||||
| 	); | ||||
| 
 | ||||
| 	void(*EndRenderPass)( | ||||
| 	void (*EndRenderPass)( | ||||
| 		Refresh_Renderer *driverData, | ||||
| 		Refresh_CommandBuffer *commandBuffer | ||||
| 	); | ||||
| 
 | ||||
| 	void(*SetViewport)( | ||||
| 	void (*SetViewport)( | ||||
| 		Refresh_Renderer *driverData, | ||||
| 		Refresh_CommandBuffer *commandBuffer, | ||||
| 		Refresh_Viewport *viewport | ||||
| 	); | ||||
| 
 | ||||
| 	void(*SetScissor)( | ||||
| 	void (*SetScissor)( | ||||
| 		Refresh_Renderer *driverData, | ||||
| 		Refresh_CommandBuffer *commandBuffer, | ||||
| 		Refresh_Rect *scissor | ||||
| 	); | ||||
| 
 | ||||
| 	void(*BindGraphicsPipeline)( | ||||
| 	void (*BindGraphicsPipeline)( | ||||
| 		Refresh_Renderer *driverData, | ||||
| 		Refresh_CommandBuffer *commandBuffer, | ||||
| 		Refresh_GraphicsPipeline *graphicsPipeline | ||||
| 	); | ||||
| 
 | ||||
| 	void(*BindVertexBuffers)( | ||||
| 	void (*BindVertexBuffers)( | ||||
| 		Refresh_Renderer *driverData, | ||||
| 		Refresh_CommandBuffer *commandBuffer, | ||||
| 		uint32_t firstBinding, | ||||
|  | @ -432,7 +437,7 @@ struct Refresh_Device | |||
| 		uint64_t *pOffsets | ||||
| 	); | ||||
| 
 | ||||
| 	void(*BindIndexBuffer)( | ||||
| 	void (*BindIndexBuffer)( | ||||
| 		Refresh_Renderer *driverData, | ||||
| 		Refresh_CommandBuffer *commandBuffer, | ||||
| 		Refresh_Buffer *buffer, | ||||
|  | @ -440,19 +445,19 @@ struct Refresh_Device | |||
| 		Refresh_IndexElementSize indexElementSize | ||||
| 	); | ||||
| 
 | ||||
| 	void(*BindComputePipeline)( | ||||
| 	void (*BindComputePipeline)( | ||||
| 		Refresh_Renderer *driverData, | ||||
| 		Refresh_CommandBuffer *commandBuffer, | ||||
| 		Refresh_ComputePipeline *computePipeline | ||||
| 	); | ||||
| 
 | ||||
| 	void(*BindComputeBuffers)( | ||||
| 	void (*BindComputeBuffers)( | ||||
| 		Refresh_Renderer *driverData, | ||||
| 		Refresh_CommandBuffer *commandBuffer, | ||||
| 		Refresh_Buffer **pBuffers | ||||
| 	); | ||||
| 
 | ||||
| 	void(*BindComputeTextures)( | ||||
| 	void (*BindComputeTextures)( | ||||
| 		Refresh_Renderer *driverData, | ||||
| 		Refresh_CommandBuffer *commandBuffer, | ||||
| 		Refresh_Texture **pTextures | ||||
|  | @ -464,7 +469,7 @@ struct Refresh_Device | |||
| 		Refresh_PresentMode presentMode | ||||
| 	); | ||||
| 
 | ||||
| 	void(*UnclaimWindow)( | ||||
| 	void (*UnclaimWindow)( | ||||
| 		Refresh_Renderer *driverData, | ||||
| 		void *windowHandle | ||||
| 	); | ||||
|  | @ -492,16 +497,37 @@ struct Refresh_Device | |||
| 		Refresh_PresentMode presentMode | ||||
| 	); | ||||
| 
 | ||||
| 	void(*Submit)( | ||||
| 	void (*Submit)( | ||||
| 		Refresh_Renderer *driverData, | ||||
| 		uint32_t commandBufferCount, | ||||
| 		Refresh_CommandBuffer **pCommandBuffers | ||||
| 		Refresh_CommandBuffer *commandBuffer | ||||
| 	); | ||||
| 
 | ||||
| 	void(*Wait)( | ||||
| 	Refresh_Fence* (*SubmitAndAcquireFence)( | ||||
| 		Refresh_Renderer *driverData, | ||||
| 		Refresh_CommandBuffer *commandBuffer | ||||
| 	); | ||||
| 
 | ||||
| 	void (*Wait)( | ||||
| 		Refresh_Renderer *driverData | ||||
| 	); | ||||
| 
 | ||||
| 	void (*WaitForFences)( | ||||
| 		Refresh_Renderer *driverData, | ||||
| 		uint8_t waitAll, | ||||
| 		uint32_t fenceCount, | ||||
| 		Refresh_Fence **pFences | ||||
| 	); | ||||
| 
 | ||||
| 	int (*QueryFence)( | ||||
| 		Refresh_Renderer *driverData, | ||||
| 		Refresh_Fence *fence | ||||
| 	); | ||||
| 
 | ||||
| 	void (*ReleaseFence)( | ||||
| 		Refresh_Renderer *driverData, | ||||
| 		Refresh_Fence *fence | ||||
| 	); | ||||
| 
 | ||||
| 	/* Opaque pointer for the Driver */ | ||||
| 	Refresh_Renderer *driverData; | ||||
| }; | ||||
|  | @ -555,7 +581,11 @@ struct Refresh_Device | |||
| 	ASSIGN_DRIVER_FUNC(GetSwapchainFormat, name) \ | ||||
| 	ASSIGN_DRIVER_FUNC(SetSwapchainPresentMode, name) \ | ||||
| 	ASSIGN_DRIVER_FUNC(Submit, name) \ | ||||
| 	ASSIGN_DRIVER_FUNC(Wait, name) | ||||
| 	ASSIGN_DRIVER_FUNC(SubmitAndAcquireFence, name) \ | ||||
| 	ASSIGN_DRIVER_FUNC(Wait, name) \ | ||||
| 	ASSIGN_DRIVER_FUNC(WaitForFences, name) \ | ||||
| 	ASSIGN_DRIVER_FUNC(QueryFence, name) \ | ||||
| 	ASSIGN_DRIVER_FUNC(ReleaseFence, name) | ||||
| 
 | ||||
| typedef struct Refresh_Driver | ||||
| { | ||||
|  | @ -567,6 +597,7 @@ typedef struct Refresh_Driver | |||
| } Refresh_Driver; | ||||
| 
 | ||||
| extern Refresh_Driver VulkanDriver; | ||||
| extern Refresh_Driver D3D11Driver; | ||||
| extern Refresh_Driver PS5Driver; | ||||
| 
 | ||||
| #endif /* REFRESH_DRIVER_H */ | ||||
|  |  | |||
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							|  | @ -0,0 +1,215 @@ | |||
| /* Refresh - XNA-inspired 3D Graphics Library with modern capabilities
 | ||||
|  * | ||||
|  * Copyright (c) 2020 Evan Hemsley | ||||
|  * | ||||
|  * This software is provided 'as-is', without any express or implied warranty. | ||||
|  * In no event will the authors be held liable for any damages arising from | ||||
|  * the use of this software. | ||||
|  * | ||||
|  * Permission is granted to anyone to use this software for any purpose, | ||||
|  * including commercial applications, and to alter it and redistribute it | ||||
|  * freely, subject to the following restrictions: | ||||
|  * | ||||
|  * 1. The origin of this software must not be misrepresented; you must not | ||||
|  * claim that you wrote the original software. If you use this software in a | ||||
|  * product, an acknowledgment in the product documentation would be | ||||
|  * appreciated but is not required. | ||||
|  * | ||||
|  * 2. Altered source versions must be plainly marked as such, and must not be | ||||
|  * misrepresented as being the original software. | ||||
|  * | ||||
|  * 3. This notice may not be removed or altered from any source distribution. | ||||
|  * | ||||
|  * Evan "cosmonaut" Hemsley <evan@moonside.games> | ||||
|  * | ||||
|  */ | ||||
| 
 | ||||
| /* Function Pointer Signatures */ | ||||
| typedef HRESULT(WINAPI* PFN_CREATE_DXGI_FACTORY)(const GUID* riid, void** ppFactory); | ||||
| 
 | ||||
|  /* IIDs (from https://magnumdb.com) */ | ||||
| 
 | ||||
| static const IID D3D_IID_IDXGIFactory1 = { 0x770aae78,0xf26f,0x4dba,{0xa8,0x29,0x25,0x3c,0x83,0xd1,0xb3,0x87} }; | ||||
| static const IID D3D_IID_IDXGIFactory6 = { 0xc1b6694f,0xff09,0x44a9,{0xb0,0x3c,0x77,0x90,0x0a,0x0a,0x1d,0x17} }; | ||||
| static const IID D3D_IID_IDXGIAdapter1 = { 0x29038f61,0x3839,0x4626,{0x91,0xfd,0x08,0x68,0x79,0x01,0x1a,0x05} }; | ||||
| static const IID D3D_IID_ID3D11Texture2D = { 0x6f15aaf2,0xd208,0x4e89,{0x9a,0xb4,0x48,0x95,0x35,0xd3,0x4f,0x9c} }; | ||||
| 
 | ||||
| /* IDXGIFactory6 (taken from dxgi1_6.h, cleaned up a bit) */ | ||||
| typedef enum | ||||
| { | ||||
| 	DXGI_FEATURE_PRESENT_ALLOW_TEARING = 0 | ||||
| } DXGI_FEATURE; | ||||
| 
 | ||||
| typedef enum | ||||
| { | ||||
| 	DXGI_GPU_PREFERENCE_UNSPECIFIED = 0, | ||||
| 	DXGI_GPU_PREFERENCE_MINIMUM_POWER = (DXGI_GPU_PREFERENCE_UNSPECIFIED + 1), | ||||
| 	DXGI_GPU_PREFERENCE_HIGH_PERFORMANCE = (DXGI_GPU_PREFERENCE_MINIMUM_POWER + 1) | ||||
| } DXGI_GPU_PREFERENCE; | ||||
| 
 | ||||
| typedef struct IDXGIFactory6 IDXGIFactory6; | ||||
| typedef struct IDXGIFactory6Vtbl | ||||
| { | ||||
| 	HRESULT(STDMETHODCALLTYPE* QueryInterface)( | ||||
| 		IDXGIFactory6* This, | ||||
| 		REFIID riid, | ||||
| 		void** ppvObject); | ||||
| 
 | ||||
| 	ULONG(STDMETHODCALLTYPE* AddRef)( | ||||
| 		IDXGIFactory6* This); | ||||
| 
 | ||||
| 	ULONG(STDMETHODCALLTYPE* Release)( | ||||
| 		IDXGIFactory6* This); | ||||
| 
 | ||||
| 	HRESULT(STDMETHODCALLTYPE* SetPrivateData)( | ||||
| 		IDXGIFactory6* This, | ||||
| 		REFGUID Name, | ||||
| 		UINT DataSize, | ||||
| 		const void* pData); | ||||
| 
 | ||||
| 	HRESULT(STDMETHODCALLTYPE* SetPrivateDataInterface)( | ||||
| 		IDXGIFactory6* This, | ||||
| 		REFGUID Name, | ||||
| 		const IUnknown* pUnknown); | ||||
| 
 | ||||
| 	HRESULT(STDMETHODCALLTYPE* GetPrivateData)( | ||||
| 		IDXGIFactory6* This, | ||||
| 		REFGUID Name, | ||||
| 		UINT* pDataSize, | ||||
| 		void* pData); | ||||
| 
 | ||||
| 	HRESULT(STDMETHODCALLTYPE* GetParent)( | ||||
| 		IDXGIFactory6* This, | ||||
| 		REFIID riid, | ||||
| 		void** ppParent); | ||||
| 
 | ||||
| 	HRESULT(STDMETHODCALLTYPE* EnumAdapters)( | ||||
| 		IDXGIFactory6* This, | ||||
| 		UINT Adapter, | ||||
| 		IDXGIAdapter** ppAdapter); | ||||
| 
 | ||||
| 	HRESULT(STDMETHODCALLTYPE* MakeWindowAssociation)( | ||||
| 		IDXGIFactory6* This, | ||||
| 		HWND WindowHandle, | ||||
| 		UINT Flags); | ||||
| 
 | ||||
| 	HRESULT(STDMETHODCALLTYPE* GetWindowAssociation)( | ||||
| 		IDXGIFactory6* This, | ||||
| 		HWND* pWindowHandle); | ||||
| 
 | ||||
| 	HRESULT(STDMETHODCALLTYPE* CreateSwapChain)( | ||||
| 		IDXGIFactory6* This, | ||||
| 		IUnknown* pDevice, | ||||
| 		DXGI_SWAP_CHAIN_DESC* pDesc, | ||||
| 		IDXGISwapChain** ppSwapChain); | ||||
| 
 | ||||
| 	HRESULT(STDMETHODCALLTYPE* CreateSoftwareAdapter)( | ||||
| 		IDXGIFactory6* This, | ||||
| 		HMODULE Module, | ||||
| 		IDXGIAdapter** ppAdapter); | ||||
| 
 | ||||
| 	HRESULT(STDMETHODCALLTYPE* EnumAdapters1)( | ||||
| 		IDXGIFactory6* This, | ||||
| 		UINT Adapter, | ||||
| 		IDXGIAdapter1** ppAdapter); | ||||
| 
 | ||||
| 	BOOL(STDMETHODCALLTYPE* IsCurrent)( | ||||
| 		IDXGIFactory6* This); | ||||
| 
 | ||||
| 	BOOL(STDMETHODCALLTYPE* IsWindowedStereoEnabled)( | ||||
| 		IDXGIFactory6* This); | ||||
| 
 | ||||
| 	HRESULT(STDMETHODCALLTYPE* CreateSwapChainForHwnd)( | ||||
| 		IDXGIFactory6* This, | ||||
| 		IUnknown* pDevice, | ||||
| 		HWND hWnd, | ||||
| 		void* pDesc, | ||||
| 		void* pFullscreenDesc, | ||||
| 		void* pRestrictToOutput, | ||||
| 		void** ppSwapChain); | ||||
| 
 | ||||
| 	HRESULT(STDMETHODCALLTYPE* CreateSwapChainForCoreWindow)( | ||||
| 		IDXGIFactory6* This, | ||||
| 		IUnknown* pDevice, | ||||
| 		IUnknown* pWindow, | ||||
| 		void* pDesc, | ||||
| 		void* pRestrictToOutput, | ||||
| 		void** ppSwapChain); | ||||
| 
 | ||||
| 	HRESULT(STDMETHODCALLTYPE* GetSharedResourceAdapterLuid)( | ||||
| 		IDXGIFactory6* This, | ||||
| 		HANDLE hResource, | ||||
| 		LUID* pLuid); | ||||
| 
 | ||||
| 	HRESULT(STDMETHODCALLTYPE* RegisterStereoStatusWindow)( | ||||
| 		IDXGIFactory6* This, | ||||
| 		HWND WindowHandle, | ||||
| 		UINT wMsg, | ||||
| 		DWORD* pdwCookie); | ||||
| 
 | ||||
| 	HRESULT(STDMETHODCALLTYPE* RegisterStereoStatusEvent)( | ||||
| 		IDXGIFactory6* This, | ||||
| 		HANDLE hEvent, | ||||
| 		DWORD* pdwCookie); | ||||
| 
 | ||||
| 	void (STDMETHODCALLTYPE* UnregisterStereoStatus)( | ||||
| 		IDXGIFactory6* This, | ||||
| 		DWORD dwCookie); | ||||
| 
 | ||||
| 	HRESULT(STDMETHODCALLTYPE* RegisterOcclusionStatusWindow)( | ||||
| 		IDXGIFactory6* This, | ||||
| 		HWND WindowHandle, | ||||
| 		UINT wMsg, | ||||
| 		DWORD* pdwCookie); | ||||
| 
 | ||||
| 	HRESULT(STDMETHODCALLTYPE* RegisterOcclusionStatusEvent)( | ||||
| 		IDXGIFactory6* This, | ||||
| 		HANDLE hEvent, | ||||
| 		DWORD* pdwCookie); | ||||
| 
 | ||||
| 	void (STDMETHODCALLTYPE* UnregisterOcclusionStatus)( | ||||
| 		IDXGIFactory6* This, | ||||
| 		DWORD dwCookie); | ||||
| 
 | ||||
| 	HRESULT(STDMETHODCALLTYPE* CreateSwapChainForComposition)( | ||||
| 		IDXGIFactory6* This, | ||||
| 		IUnknown* pDevice, | ||||
| 		void* pDesc, | ||||
| 		void* pRestrictToOutput, | ||||
| 		void** ppSwapChain); | ||||
| 
 | ||||
| 	UINT(STDMETHODCALLTYPE* GetCreationFlags)( | ||||
| 		IDXGIFactory6* This); | ||||
| 
 | ||||
| 	HRESULT(STDMETHODCALLTYPE* EnumAdapterByLuid)( | ||||
| 		IDXGIFactory6* This, | ||||
| 		LUID AdapterLuid, | ||||
| 		REFIID riid, | ||||
| 		void** ppvAdapter); | ||||
| 
 | ||||
| 	HRESULT(STDMETHODCALLTYPE* EnumWarpAdapter)( | ||||
| 		IDXGIFactory6* This, | ||||
| 		REFIID riid, | ||||
| 		void** ppvAdapter); | ||||
| 
 | ||||
| 	HRESULT(STDMETHODCALLTYPE* CheckFeatureSupport)( | ||||
| 		IDXGIFactory6* This, | ||||
| 		DXGI_FEATURE Feature, | ||||
| 		void* pFeatureSupportData, | ||||
| 		UINT FeatureSupportDataSize); | ||||
| 
 | ||||
| 	HRESULT(STDMETHODCALLTYPE* EnumAdapterByGpuPreference)( | ||||
| 		IDXGIFactory6* This, | ||||
| 		UINT Adapter, | ||||
| 		DXGI_GPU_PREFERENCE GpuPreference, | ||||
| 		REFIID riid, | ||||
| 		void** ppvAdapter); | ||||
| } IDXGIFactory6Vtbl; | ||||
| 
 | ||||
| struct IDXGIFactory6 | ||||
| { | ||||
| 	struct IDXGIFactory6Vtbl* lpVtbl; | ||||
| }; | ||||
| 
 | ||||
| #define IDXGIFactory6_EnumAdapterByGpuPreference(This,Adapter,GpuPreference,riid,ppvAdapter)	\ | ||||
| 	( (This)->lpVtbl -> EnumAdapterByGpuPreference(This,Adapter,GpuPreference,riid,ppvAdapter) )  | ||||
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							|  | @ -61,7 +61,7 @@ | |||
|     <ClCompile> | ||||
|       <WarningLevel>Level3</WarningLevel> | ||||
|       <Optimization>Disabled</Optimization> | ||||
|       <PreprocessorDefinitions>REFRESH_DRIVER_VULKAN;%(PreprocessorDefinitions)</PreprocessorDefinitions> | ||||
|       <PreprocessorDefinitions>REFRESH_DRIVER_VULKAN;REFRESH_DRIVER_D3D11;%(PreprocessorDefinitions)</PreprocessorDefinitions> | ||||
|     </ClCompile> | ||||
|     <Link> | ||||
|       <GenerateDebugInformation>DebugFull</GenerateDebugInformation> | ||||
|  | @ -72,7 +72,7 @@ | |||
|     <ClCompile> | ||||
|       <WarningLevel>Level3</WarningLevel> | ||||
|       <Optimization>MaxSpeed</Optimization> | ||||
|       <PreprocessorDefinitions>REFRESH_DRIVER_VULKAN;%(PreprocessorDefinitions)</PreprocessorDefinitions> | ||||
|       <PreprocessorDefinitions>REFRESH_DRIVER_VULKAN;REFRESH_DRIVER_D3D11;%(PreprocessorDefinitions)</PreprocessorDefinitions> | ||||
|       <FunctionLevelLinking>true</FunctionLevelLinking> | ||||
|       <IntrinsicFunctions>true</IntrinsicFunctions> | ||||
|     </ClCompile> | ||||
|  | @ -84,6 +84,7 @@ | |||
|   </ItemDefinitionGroup> | ||||
|   <ItemGroup> | ||||
|     <ClCompile Include="..\src\Refresh.c" /> | ||||
|     <ClCompile Include="..\src\Refresh_Driver_D3D11.c" /> | ||||
|     <ClCompile Include="..\src\Refresh_Driver_Vulkan.c" /> | ||||
|     <ClCompile Include="..\src\Refresh_Image.c" /> | ||||
|   </ItemGroup> | ||||
|  | @ -91,6 +92,7 @@ | |||
|     <ClInclude Include="..\include\Refresh.h" /> | ||||
|     <ClInclude Include="..\include\Refresh_Image.h" /> | ||||
|     <ClInclude Include="..\src\Refresh_Driver.h" /> | ||||
|     <ClInclude Include="..\src\Refresh_Driver_D3D11_cdefines.h" /> | ||||
|     <ClInclude Include="..\src\Refresh_Driver_Vulkan_vkfuncs.h" /> | ||||
|   </ItemGroup> | ||||
|   <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" /> | ||||
|  |  | |||
|  | @ -10,6 +10,9 @@ | |||
|     <ClCompile Include="..\src\Refresh_Image.c"> | ||||
|       <Filter>Source Files</Filter> | ||||
|     </ClCompile> | ||||
|     <ClCompile Include="..\src\Refresh_Driver_D3D11.c"> | ||||
|       <Filter>Source Files</Filter> | ||||
|     </ClCompile> | ||||
|   </ItemGroup> | ||||
|   <ItemGroup> | ||||
|     <ClInclude Include="..\include\Refresh.h"> | ||||
|  | @ -24,6 +27,9 @@ | |||
|     <ClInclude Include="..\include\Refresh_Image.h"> | ||||
|       <Filter>Header Files</Filter> | ||||
|     </ClInclude> | ||||
|     <ClInclude Include="..\src\Refresh_Driver_D3D11_cdefines.h"> | ||||
|       <Filter>Header Files</Filter> | ||||
|     </ClInclude> | ||||
|   </ItemGroup> | ||||
|   <ItemGroup> | ||||
|     <Filter Include="Header Files"> | ||||
|  |  | |||
		Loading…
	
		Reference in New Issue