forked from MoonsideGames/Refresh
				
			Compare commits
	
		
			52 Commits 
		
	
	
	| Author | SHA1 | Date | 
|---|---|---|
|  | b78d01592b | |
|  | c99b4cdfa1 | |
|  | 2803e6d94e | |
|  | 30b5f1dd21 | |
|  | 4ce2d80f80 | |
|  | 27e9c741f8 | |
|  | c10ca98ccd | |
|  | d441424b7c | |
|  | 55c77def69 | |
|  | 2634359b48 | |
|  | 56e3eb2af5 | |
|  | 859fc3b9fa | |
|  | 05350a9332 | |
|  | 760c29699f | |
|  | 20636ec951 | |
|  | 7297eba889 | |
|  | b72b0b5fde | |
|  | fa92e9e08a | |
|  | 483c07f3a8 | |
|  | f01d5d817a | |
|  | 17aae46eae | |
|  | 1b3e954da8 | |
|  | 0989e45f88 | |
|  | 6e6fec5224 | |
|  | 34b2e437de | |
|  | d69bbbe818 | |
|  | 54a8ff122c | |
|  | a15e26b124 | |
|  | 172fa83417 | |
|  | a3949528eb | |
|  | f55968814f | |
|  | c978df6275 | |
|  | de42163673 | |
|  | 4f412b5c15 | |
|  | c3a5d9f417 | |
|  | 9631dc9f83 | |
|  | 5a2b07097a | |
|  | 1f9f7e0939 | |
|  | 4df0459b04 | |
|  | 0f29bf03e9 | |
|  | 74909b49c3 | |
|  | 3f5fe1ff67 | |
|  | 3fc743ce28 | |
|  | 153c3c3c60 | |
|  | decddae384 | |
|  | 2d66ec775b | |
|  | 8be8ce1062 | |
|  | 8eebd9c744 | |
|  | 1f2aaeed9f | |
|  | 6439516835 | |
|  | 89ba9c52ff | |
|  | e3ab5fadf8 | 
|  | @ -8,8 +8,8 @@ option(BUILD_SHARED_LIBS "Build shared library" ON) | ||||||
| 
 | 
 | ||||||
| # Version | # Version | ||||||
| SET(LIB_MAJOR_VERSION "1") | SET(LIB_MAJOR_VERSION "1") | ||||||
| SET(LIB_MINOR_VERSION "10") | SET(LIB_MINOR_VERSION "15") | ||||||
| SET(LIB_REVISION "0") | SET(LIB_REVISION "4") | ||||||
| SET(LIB_VERSION "${LIB_MAJOR_VERSION}.${LIB_MINOR_VERSION}.${LIB_REVISION}") | SET(LIB_VERSION "${LIB_MAJOR_VERSION}.${LIB_MINOR_VERSION}.${LIB_REVISION}") | ||||||
| 
 | 
 | ||||||
| # Build Type | # Build Type | ||||||
|  | @ -60,6 +60,11 @@ if(NOT MSVC) | ||||||
| 	set_property(TARGET Refresh PROPERTY COMPILE_FLAGS "-std=gnu99 -Wall -Wno-strict-aliasing -pedantic") | 	set_property(TARGET Refresh PROPERTY COMPILE_FLAGS "-std=gnu99 -Wall -Wno-strict-aliasing -pedantic") | ||||||
| endif() | endif() | ||||||
| 
 | 
 | ||||||
|  | # Windows is silly and we need to manually include the Vulkan SDK | ||||||
|  | if(MSVC) | ||||||
|  | 	target_include_directories(Refresh PUBLIC $ENV{VULKAN_SDK}/include) | ||||||
|  | endif() | ||||||
|  | 
 | ||||||
| # Refresh folders as includes, for other targets to consume | # Refresh folders as includes, for other targets to consume | ||||||
| target_include_directories(Refresh PUBLIC | target_include_directories(Refresh PUBLIC | ||||||
| 	$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/src> | 	$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/src> | ||||||
|  |  | ||||||
|  | @ -55,8 +55,8 @@ extern "C" { | ||||||
| /* Version API */ | /* Version API */ | ||||||
| 
 | 
 | ||||||
| #define REFRESH_MAJOR_VERSION   1 | #define REFRESH_MAJOR_VERSION   1 | ||||||
| #define REFRESH_MINOR_VERSION	10 | #define REFRESH_MINOR_VERSION	15 | ||||||
| #define REFRESH_PATCH_VERSION	0 | #define REFRESH_PATCH_VERSION	4 | ||||||
| 
 | 
 | ||||||
| #define REFRESH_COMPILED_VERSION ( \ | #define REFRESH_COMPILED_VERSION ( \ | ||||||
| 	(REFRESH_MAJOR_VERSION * 100 * 100) + \ | 	(REFRESH_MAJOR_VERSION * 100 * 100) + \ | ||||||
|  | @ -76,6 +76,7 @@ typedef struct Refresh_ShaderModule Refresh_ShaderModule; | ||||||
| typedef struct Refresh_ComputePipeline Refresh_ComputePipeline; | typedef struct Refresh_ComputePipeline Refresh_ComputePipeline; | ||||||
| typedef struct Refresh_GraphicsPipeline Refresh_GraphicsPipeline; | typedef struct Refresh_GraphicsPipeline Refresh_GraphicsPipeline; | ||||||
| typedef struct Refresh_CommandBuffer Refresh_CommandBuffer; | typedef struct Refresh_CommandBuffer Refresh_CommandBuffer; | ||||||
|  | typedef struct Refresh_Fence Refresh_Fence; | ||||||
| 
 | 
 | ||||||
| typedef enum Refresh_PresentMode | typedef enum Refresh_PresentMode | ||||||
| { | { | ||||||
|  | @ -463,6 +464,7 @@ typedef struct Refresh_TextureCreateInfo | ||||||
| 	uint32_t depth; | 	uint32_t depth; | ||||||
| 	uint8_t isCube; | 	uint8_t isCube; | ||||||
| 	uint32_t levelCount; | 	uint32_t levelCount; | ||||||
|  | 	Refresh_SampleCount sampleCount; | ||||||
| 	Refresh_TextureFormat format; | 	Refresh_TextureFormat format; | ||||||
| 	Refresh_TextureUsageFlags usageFlags; | 	Refresh_TextureUsageFlags usageFlags; | ||||||
| } Refresh_TextureCreateInfo; | } Refresh_TextureCreateInfo; | ||||||
|  | @ -551,7 +553,6 @@ typedef struct Refresh_ColorAttachmentInfo | ||||||
| 	uint32_t depth; | 	uint32_t depth; | ||||||
| 	uint32_t layer; | 	uint32_t layer; | ||||||
| 	uint32_t level; | 	uint32_t level; | ||||||
| 	Refresh_SampleCount sampleCount; |  | ||||||
| 	Refresh_Vec4 clearColor; /* Can be ignored by RenderPass */ | 	Refresh_Vec4 clearColor; /* Can be ignored by RenderPass */ | ||||||
| 	Refresh_LoadOp loadOp; | 	Refresh_LoadOp loadOp; | ||||||
| 	Refresh_StoreOp storeOp; | 	Refresh_StoreOp storeOp; | ||||||
|  | @ -778,15 +779,20 @@ REFRESHAPI void Refresh_SetTextureData( | ||||||
| 
 | 
 | ||||||
| /* Uploads YUV image data to three R8 texture objects.
 | /* Uploads YUV image data to three R8 texture objects.
 | ||||||
|  * |  * | ||||||
|  * y:		The texture storing the Y data. |  * y:            The texture storing the Y data. | ||||||
|  * u:		The texture storing the U (Cb) data. |  * u:            The texture storing the U (Cb) data. | ||||||
|  * v:		The texture storing the V (Cr) data. |  * v:            The texture storing the V (Cr) data. | ||||||
|  * yWidth:	The width of the Y plane. |  * yWidth:       The width of the Y plane. | ||||||
|  * yHeight:	The height of the Y plane. |  * yHeight:      The height of the Y plane. | ||||||
|  * uvWidth:	The width of the U/V planes. |  * uvWidth:      The width of the U/V planes. | ||||||
|  * uvHeight:	The height of the U/V planes. |  * uvHeight:     The height of the U/V planes. | ||||||
|  * data:	A pointer to the raw YUV image data. |  * yData:        A pointer to the raw Y image data. | ||||||
|  * dataLength:	The size of the image data in bytes. |  * 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( | REFRESHAPI void Refresh_SetTextureDataYUV( | ||||||
| 	Refresh_Device *driverData, | 	Refresh_Device *driverData, | ||||||
|  | @ -798,8 +804,13 @@ REFRESHAPI void Refresh_SetTextureDataYUV( | ||||||
| 	uint32_t yHeight, | 	uint32_t yHeight, | ||||||
| 	uint32_t uvWidth, | 	uint32_t uvWidth, | ||||||
| 	uint32_t uvHeight, | 	uint32_t uvHeight, | ||||||
| 	void* data, | 	void *yDataPtr, | ||||||
| 	uint32_t dataLength | 	void *uDataPtr, | ||||||
|  | 	void *vDataPtr, | ||||||
|  | 	uint32_t yDataLength, | ||||||
|  | 	uint32_t uvDataLength, | ||||||
|  | 	uint32_t yStride, | ||||||
|  | 	uint32_t uvStride | ||||||
| ); | ); | ||||||
| 
 | 
 | ||||||
| /* Performs an asynchronous texture-to-texture copy.
 | /* Performs an asynchronous texture-to-texture copy.
 | ||||||
|  | @ -1196,15 +1207,50 @@ REFRESHAPI Refresh_Texture* Refresh_AcquireSwapchainTexture( | ||||||
| /* Submits all of the enqueued commands. */ | /* Submits all of the enqueued commands. */ | ||||||
| REFRESHAPI void Refresh_Submit( | REFRESHAPI void Refresh_Submit( | ||||||
| 	Refresh_Device* device, | 	Refresh_Device* device, | ||||||
| 	uint32_t commandBufferCount, | 	Refresh_CommandBuffer *commandBuffer | ||||||
| 	Refresh_CommandBuffer **pCommandBuffers |  | ||||||
| ); | ); | ||||||
| 
 | 
 | ||||||
| /* 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( | REFRESHAPI void Refresh_Wait( | ||||||
| 	Refresh_Device *device | 	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 | #ifdef __cplusplus | ||||||
| } | } | ||||||
| #endif /* __cplusplus */ | #endif /* __cplusplus */ | ||||||
|  |  | ||||||
|  | @ -44,44 +44,45 @@ | ||||||
| extern "C" { | extern "C" { | ||||||
| #endif /* __cplusplus */ | #endif /* __cplusplus */ | ||||||
| 
 | 
 | ||||||
| /* Decodes PNG data into raw RGBA8 texture data.
 | /* Image Read API */ | ||||||
|  | 
 | ||||||
|  | /* Decodes image data into raw RGBA8 texture data.
 | ||||||
|  * |  * | ||||||
|  * w:		    Filled with the width of the image. |  * w:		    Filled with the width of the image. | ||||||
|  * h:		    Filled with the height of the image. |  * h:		    Filled with the height of the image. | ||||||
|  * numChannels: Filled with the number of channels in the image. |  * len:			Filled with the length of pixel data in bytes. | ||||||
|  * |  * | ||||||
|  * Returns a block of memory suitable for use with Refresh_SetTextureData2D. |  * Returns a block of memory suitable for use with Refresh_SetTextureData2D. | ||||||
|  * Be sure to free the memory with Refresh_Image_Free after use! |  * Be sure to free the memory with Refresh_Image_Free after use! | ||||||
|  */ |  */ | ||||||
| REFRESHAPI uint8_t* Refresh_Image_Load( | REFRESHAPI uint8_t* Refresh_Image_Load( | ||||||
| 	char const *filename, | 	uint8_t *bufferPtr, | ||||||
|  | 	int32_t bufferLength, | ||||||
| 	int32_t *w, | 	int32_t *w, | ||||||
| 	int32_t *h, | 	int32_t *h, | ||||||
| 	int32_t *numChannels | 	int32_t *len | ||||||
| ); | ); | ||||||
| 
 | 
 | ||||||
| /* Frees memory returned by Refresh_Image_Load. (Do NOT free the memory yourself!)
 | /* Frees memory returned by Refresh_Image_Load. Do NOT free the memory yourself!
 | ||||||
|  * |  * | ||||||
|  * mem: A pointer previously returned by Refresh_Image_Load. |  * mem: A pointer previously returned by Refresh_Image_LoadPNG. | ||||||
|  */ |  */ | ||||||
| REFRESHAPI void Refresh_Image_Free(uint8_t *mem); | REFRESHAPI void Refresh_Image_Free(uint8_t *mem); | ||||||
| 
 | 
 | ||||||
| /* Image Write API */ | /* Image Write API */ | ||||||
| 
 | 
 | ||||||
| /* Encodes 32-bit color data into PNG data.
 | /* Returns a buffer of PNG encoded from RGBA8 color data.
 | ||||||
|  * |  * | ||||||
|  * filename:    The filename that the image will be written to. |  * data:	The raw color data. | ||||||
|  * w:	        The width of the PNG data. |  * w:		The width of the color data. | ||||||
|  * h:	        The height of the PNG data. |  * h:		The height of the color data. | ||||||
|  * bgra:		Whether the data is in BGRA8 format. Otherwise will assume RBGA8. |  * len:		Filled with the length of PNG data in bytes. | ||||||
|  * data:	    The raw color data. |  | ||||||
|  */ |  */ | ||||||
| REFRESHAPI void Refresh_Image_SavePNG( | REFRESHAPI void Refresh_Image_SavePNG( | ||||||
| 	char const *filename, | 	const char* filename, | ||||||
|  | 	uint8_t* data, | ||||||
| 	int32_t w, | 	int32_t w, | ||||||
| 	int32_t h, | 	int32_t h | ||||||
| 	uint8_t bgra, |  | ||||||
| 	uint8_t *data |  | ||||||
| ); | ); | ||||||
| 
 | 
 | ||||||
| #ifdef __cplusplus | #ifdef __cplusplus | ||||||
|  |  | ||||||
|  | @ -186,7 +186,7 @@ partial class Program | ||||||
| 		} | 		} | ||||||
| 
 | 
 | ||||||
| 		// Create the output blob file | 		// Create the output blob file | ||||||
| 		string outputFilepath = Path.Combine(data.outputDir, $"{shaderName}.refresh"); | 		string outputFilepath = Path.Combine(data.outputDir, $"{shaderName}{shaderType}.refresh"); | ||||||
| 		using (FileStream fs = File.Create(outputFilepath)) | 		using (FileStream fs = File.Create(outputFilepath)) | ||||||
| 		{ | 		{ | ||||||
| 			using (BinaryWriter writer = new BinaryWriter(fs)) | 			using (BinaryWriter writer = new BinaryWriter(fs)) | ||||||
|  | @ -238,7 +238,7 @@ partial class Program | ||||||
| 	{ | 	{ | ||||||
| 		Process glslc = Process.Start( | 		Process glslc = Process.Start( | ||||||
| 			"glslc", | 			"glslc", | ||||||
| 			$"{glslPath} -o {outputPath}" | 			$"\"{glslPath}\" -o \"{outputPath}\"" | ||||||
| 		); | 		); | ||||||
| 		glslc.WaitForExit(); | 		glslc.WaitForExit(); | ||||||
| 		if (glslc.ExitCode != 0) | 		if (glslc.ExitCode != 0) | ||||||
|  | @ -254,7 +254,7 @@ partial class Program | ||||||
| 	{ | 	{ | ||||||
| 		Process spirvcross = Process.Start( | 		Process spirvcross = Process.Start( | ||||||
| 			"spirv-cross", | 			"spirv-cross", | ||||||
| 			$"{spirvPath} --hlsl --shader-model 50 --output {outputPath}" | 			$"\"{spirvPath}\" --hlsl --shader-model 50 --output \"{outputPath}\"" | ||||||
| 		); | 		); | ||||||
| 		spirvcross.WaitForExit(); | 		spirvcross.WaitForExit(); | ||||||
| 		if (spirvcross.ExitCode != 0) | 		if (spirvcross.ExitCode != 0) | ||||||
|  |  | ||||||
|  | @ -4,6 +4,7 @@ | ||||||
|     <OutputType>Exe</OutputType> |     <OutputType>Exe</OutputType> | ||||||
|     <TargetFramework>net7.0</TargetFramework> |     <TargetFramework>net7.0</TargetFramework> | ||||||
|     <TargetName>refreshc</TargetName> |     <TargetName>refreshc</TargetName> | ||||||
|  | 	<PublishAot>true</PublishAot> | ||||||
|   </PropertyGroup> |   </PropertyGroup> | ||||||
| 
 | 
 | ||||||
| </Project> | </Project> | ||||||
|  |  | ||||||
|  | @ -438,8 +438,13 @@ void Refresh_SetTextureDataYUV( | ||||||
| 	uint32_t yHeight, | 	uint32_t yHeight, | ||||||
| 	uint32_t uvWidth, | 	uint32_t uvWidth, | ||||||
| 	uint32_t uvHeight, | 	uint32_t uvHeight, | ||||||
| 	void* data, | 	void *yDataPtr, | ||||||
| 	uint32_t dataLength | 	void *uDataPtr, | ||||||
|  | 	void *vDataPtr, | ||||||
|  | 	uint32_t yDataLength, | ||||||
|  | 	uint32_t uvDataLength, | ||||||
|  | 	uint32_t yStride, | ||||||
|  | 	uint32_t uvStride | ||||||
| ) { | ) { | ||||||
| 	NULL_RETURN(device); | 	NULL_RETURN(device); | ||||||
| 	device->SetTextureDataYUV( | 	device->SetTextureDataYUV( | ||||||
|  | @ -452,8 +457,13 @@ void Refresh_SetTextureDataYUV( | ||||||
| 		yHeight, | 		yHeight, | ||||||
| 		uvWidth, | 		uvWidth, | ||||||
| 		uvHeight, | 		uvHeight, | ||||||
| 		data, | 		yDataPtr, | ||||||
| 		dataLength | 		uDataPtr, | ||||||
|  | 		vDataPtr, | ||||||
|  | 		yDataLength, | ||||||
|  | 		uvDataLength, | ||||||
|  | 		yStride, | ||||||
|  | 		uvStride | ||||||
| 	); | 	); | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
|  | @ -882,14 +892,23 @@ void Refresh_SetSwapchainPresentMode( | ||||||
| 
 | 
 | ||||||
| void Refresh_Submit( | void Refresh_Submit( | ||||||
| 	Refresh_Device *device, | 	Refresh_Device *device, | ||||||
| 	uint32_t commandBufferCount, | 	Refresh_CommandBuffer *commandBuffer | ||||||
| 	Refresh_CommandBuffer **pCommandBuffers |  | ||||||
| ) { | ) { | ||||||
| 	NULL_RETURN(device); | 	NULL_RETURN(device); | ||||||
| 	device->Submit( | 	device->Submit( | ||||||
| 		device->driverData, | 		device->driverData, | ||||||
| 		commandBufferCount, | 		commandBuffer | ||||||
| 		pCommandBuffers | 	); | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | Refresh_Fence* Refresh_SubmitAndAcquireFence( | ||||||
|  | 	Refresh_Device *device, | ||||||
|  | 	Refresh_CommandBuffer *commandBuffer | ||||||
|  | ) { | ||||||
|  | 	NULL_RETURN_NULL(device); | ||||||
|  | 	return device->SubmitAndAcquireFence( | ||||||
|  | 		device->driverData, | ||||||
|  | 		commandBuffer | ||||||
| 	); | 	); | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
|  | @ -902,4 +921,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: */ | /* vim: set noexpandtab shiftwidth=8 tabstop=8: */ | ||||||
|  |  | ||||||
|  | @ -268,7 +268,7 @@ struct Refresh_Device | ||||||
| 
 | 
 | ||||||
| 	/* Setters */ | 	/* Setters */ | ||||||
| 
 | 
 | ||||||
| 	void(*SetTextureData)( | 	void (*SetTextureData)( | ||||||
| 		Refresh_Renderer *driverData, | 		Refresh_Renderer *driverData, | ||||||
| 		Refresh_CommandBuffer *commandBuffer, | 		Refresh_CommandBuffer *commandBuffer, | ||||||
| 		Refresh_TextureSlice *textureSlice, | 		Refresh_TextureSlice *textureSlice, | ||||||
|  | @ -276,7 +276,7 @@ struct Refresh_Device | ||||||
| 		uint32_t dataLengthInBytes | 		uint32_t dataLengthInBytes | ||||||
| 	); | 	); | ||||||
| 
 | 
 | ||||||
| 	void(*SetTextureDataYUV)( | 	void (*SetTextureDataYUV)( | ||||||
| 		Refresh_Renderer *driverData, | 		Refresh_Renderer *driverData, | ||||||
| 		Refresh_CommandBuffer* commandBuffer, | 		Refresh_CommandBuffer* commandBuffer, | ||||||
| 		Refresh_Texture *y, | 		Refresh_Texture *y, | ||||||
|  | @ -286,11 +286,16 @@ struct Refresh_Device | ||||||
| 		uint32_t yHeight, | 		uint32_t yHeight, | ||||||
| 		uint32_t uvWidth, | 		uint32_t uvWidth, | ||||||
| 		uint32_t uvHeight, | 		uint32_t uvHeight, | ||||||
| 		void* data, | 		void *yDataPtr, | ||||||
| 		uint32_t dataLength | 		void *uDataPtr, | ||||||
|  | 		void *vDataPtr, | ||||||
|  | 		uint32_t yDataLength, | ||||||
|  | 		uint32_t uvDataLength, | ||||||
|  | 		uint32_t yStride, | ||||||
|  | 		uint32_t uvStride | ||||||
| 	); | 	); | ||||||
| 
 | 
 | ||||||
| 	void(*CopyTextureToTexture)( | 	void (*CopyTextureToTexture)( | ||||||
| 		Refresh_Renderer *driverData, | 		Refresh_Renderer *driverData, | ||||||
| 		Refresh_CommandBuffer *commandBuffer, | 		Refresh_CommandBuffer *commandBuffer, | ||||||
| 		Refresh_TextureSlice *sourceTextureSlice, | 		Refresh_TextureSlice *sourceTextureSlice, | ||||||
|  | @ -298,14 +303,14 @@ struct Refresh_Device | ||||||
| 		Refresh_Filter filter | 		Refresh_Filter filter | ||||||
| 	); | 	); | ||||||
| 
 | 
 | ||||||
| 	void(*CopyTextureToBuffer)( | 	void (*CopyTextureToBuffer)( | ||||||
| 		Refresh_Renderer *driverData, | 		Refresh_Renderer *driverData, | ||||||
| 		Refresh_CommandBuffer *commandBuffer, | 		Refresh_CommandBuffer *commandBuffer, | ||||||
| 		Refresh_TextureSlice *textureSlice, | 		Refresh_TextureSlice *textureSlice, | ||||||
| 		Refresh_Buffer *buffer | 		Refresh_Buffer *buffer | ||||||
| 	); | 	); | ||||||
| 
 | 
 | ||||||
| 	void(*SetBufferData)( | 	void (*SetBufferData)( | ||||||
| 		Refresh_Renderer *driverData, | 		Refresh_Renderer *driverData, | ||||||
| 		Refresh_CommandBuffer *commandBuffer, | 		Refresh_CommandBuffer *commandBuffer, | ||||||
| 		Refresh_Buffer *buffer, | 		Refresh_Buffer *buffer, | ||||||
|  | @ -314,14 +319,14 @@ struct Refresh_Device | ||||||
| 		uint32_t dataLength | 		uint32_t dataLength | ||||||
| 	); | 	); | ||||||
| 
 | 
 | ||||||
| 	uint32_t(*PushVertexShaderUniforms)( | 	uint32_t (*PushVertexShaderUniforms)( | ||||||
| 		Refresh_Renderer *driverData, | 		Refresh_Renderer *driverData, | ||||||
| 		Refresh_CommandBuffer *commandBuffer, | 		Refresh_CommandBuffer *commandBuffer, | ||||||
| 		void *data, | 		void *data, | ||||||
| 		uint32_t dataLengthInBytes | 		uint32_t dataLengthInBytes | ||||||
| 	); | 	); | ||||||
| 
 | 
 | ||||||
| 	uint32_t(*PushFragmentShaderUniforms)( | 	uint32_t (*PushFragmentShaderUniforms)( | ||||||
| 		Refresh_Renderer *driverData, | 		Refresh_Renderer *driverData, | ||||||
| 		Refresh_CommandBuffer *commandBuffer, | 		Refresh_CommandBuffer *commandBuffer, | ||||||
| 		void *data, | 		void *data, | ||||||
|  | @ -335,14 +340,14 @@ struct Refresh_Device | ||||||
| 		uint32_t dataLengthInBytes | 		uint32_t dataLengthInBytes | ||||||
| 	); | 	); | ||||||
| 
 | 
 | ||||||
| 	void(*BindVertexSamplers)( | 	void (*BindVertexSamplers)( | ||||||
| 		Refresh_Renderer *driverData, | 		Refresh_Renderer *driverData, | ||||||
| 		Refresh_CommandBuffer *commandBuffer, | 		Refresh_CommandBuffer *commandBuffer, | ||||||
| 		Refresh_Texture **pTextures, | 		Refresh_Texture **pTextures, | ||||||
| 		Refresh_Sampler **pSamplers | 		Refresh_Sampler **pSamplers | ||||||
| 	); | 	); | ||||||
| 
 | 
 | ||||||
| 	void(*BindFragmentSamplers)( | 	void (*BindFragmentSamplers)( | ||||||
| 		Refresh_Renderer *driverData, | 		Refresh_Renderer *driverData, | ||||||
| 		Refresh_CommandBuffer *commandBuffer, | 		Refresh_CommandBuffer *commandBuffer, | ||||||
| 		Refresh_Texture **pTextures, | 		Refresh_Texture **pTextures, | ||||||
|  | @ -351,7 +356,7 @@ struct Refresh_Device | ||||||
| 
 | 
 | ||||||
| 	/* Getters */ | 	/* Getters */ | ||||||
| 
 | 
 | ||||||
| 	void(*GetBufferData)( | 	void (*GetBufferData)( | ||||||
| 		Refresh_Renderer *driverData, | 		Refresh_Renderer *driverData, | ||||||
| 		Refresh_Buffer *buffer, | 		Refresh_Buffer *buffer, | ||||||
| 		void *data, | 		void *data, | ||||||
|  | @ -360,39 +365,39 @@ struct Refresh_Device | ||||||
| 
 | 
 | ||||||
| 	/* Disposal */ | 	/* Disposal */ | ||||||
| 
 | 
 | ||||||
| 	void(*QueueDestroyTexture)( | 	void (*QueueDestroyTexture)( | ||||||
| 		Refresh_Renderer *driverData, | 		Refresh_Renderer *driverData, | ||||||
| 		Refresh_Texture *texture | 		Refresh_Texture *texture | ||||||
| 	); | 	); | ||||||
| 
 | 
 | ||||||
| 	void(*QueueDestroySampler)( | 	void (*QueueDestroySampler)( | ||||||
| 		Refresh_Renderer *driverData, | 		Refresh_Renderer *driverData, | ||||||
| 		Refresh_Sampler *sampler | 		Refresh_Sampler *sampler | ||||||
| 	); | 	); | ||||||
| 
 | 
 | ||||||
| 	void(*QueueDestroyBuffer)( | 	void (*QueueDestroyBuffer)( | ||||||
| 		Refresh_Renderer *driverData, | 		Refresh_Renderer *driverData, | ||||||
| 		Refresh_Buffer *buffer | 		Refresh_Buffer *buffer | ||||||
| 	); | 	); | ||||||
| 
 | 
 | ||||||
| 	void(*QueueDestroyShaderModule)( | 	void (*QueueDestroyShaderModule)( | ||||||
| 		Refresh_Renderer *driverData, | 		Refresh_Renderer *driverData, | ||||||
| 		Refresh_ShaderModule *shaderModule | 		Refresh_ShaderModule *shaderModule | ||||||
| 	); | 	); | ||||||
| 
 | 
 | ||||||
| 	void(*QueueDestroyComputePipeline)( | 	void (*QueueDestroyComputePipeline)( | ||||||
| 		Refresh_Renderer *driverData, | 		Refresh_Renderer *driverData, | ||||||
| 		Refresh_ComputePipeline *computePipeline | 		Refresh_ComputePipeline *computePipeline | ||||||
| 	); | 	); | ||||||
| 
 | 
 | ||||||
| 	void(*QueueDestroyGraphicsPipeline)( | 	void (*QueueDestroyGraphicsPipeline)( | ||||||
| 		Refresh_Renderer *driverData, | 		Refresh_Renderer *driverData, | ||||||
| 		Refresh_GraphicsPipeline *graphicsPipeline | 		Refresh_GraphicsPipeline *graphicsPipeline | ||||||
| 	); | 	); | ||||||
| 
 | 
 | ||||||
| 	/* Graphics State */ | 	/* Graphics State */ | ||||||
| 
 | 
 | ||||||
| 	void(*BeginRenderPass)( | 	void (*BeginRenderPass)( | ||||||
| 		Refresh_Renderer *driverData, | 		Refresh_Renderer *driverData, | ||||||
| 		Refresh_CommandBuffer *commandBuffer, | 		Refresh_CommandBuffer *commandBuffer, | ||||||
| 		Refresh_ColorAttachmentInfo *colorAttachmentInfos, | 		Refresh_ColorAttachmentInfo *colorAttachmentInfos, | ||||||
|  | @ -400,30 +405,30 @@ struct Refresh_Device | ||||||
| 		Refresh_DepthStencilAttachmentInfo *depthStencilAttachmentInfo | 		Refresh_DepthStencilAttachmentInfo *depthStencilAttachmentInfo | ||||||
| 	); | 	); | ||||||
| 
 | 
 | ||||||
| 	void(*EndRenderPass)( | 	void (*EndRenderPass)( | ||||||
| 		Refresh_Renderer *driverData, | 		Refresh_Renderer *driverData, | ||||||
| 		Refresh_CommandBuffer *commandBuffer | 		Refresh_CommandBuffer *commandBuffer | ||||||
| 	); | 	); | ||||||
| 
 | 
 | ||||||
| 	void(*SetViewport)( | 	void (*SetViewport)( | ||||||
| 		Refresh_Renderer *driverData, | 		Refresh_Renderer *driverData, | ||||||
| 		Refresh_CommandBuffer *commandBuffer, | 		Refresh_CommandBuffer *commandBuffer, | ||||||
| 		Refresh_Viewport *viewport | 		Refresh_Viewport *viewport | ||||||
| 	); | 	); | ||||||
| 
 | 
 | ||||||
| 	void(*SetScissor)( | 	void (*SetScissor)( | ||||||
| 		Refresh_Renderer *driverData, | 		Refresh_Renderer *driverData, | ||||||
| 		Refresh_CommandBuffer *commandBuffer, | 		Refresh_CommandBuffer *commandBuffer, | ||||||
| 		Refresh_Rect *scissor | 		Refresh_Rect *scissor | ||||||
| 	); | 	); | ||||||
| 
 | 
 | ||||||
| 	void(*BindGraphicsPipeline)( | 	void (*BindGraphicsPipeline)( | ||||||
| 		Refresh_Renderer *driverData, | 		Refresh_Renderer *driverData, | ||||||
| 		Refresh_CommandBuffer *commandBuffer, | 		Refresh_CommandBuffer *commandBuffer, | ||||||
| 		Refresh_GraphicsPipeline *graphicsPipeline | 		Refresh_GraphicsPipeline *graphicsPipeline | ||||||
| 	); | 	); | ||||||
| 
 | 
 | ||||||
| 	void(*BindVertexBuffers)( | 	void (*BindVertexBuffers)( | ||||||
| 		Refresh_Renderer *driverData, | 		Refresh_Renderer *driverData, | ||||||
| 		Refresh_CommandBuffer *commandBuffer, | 		Refresh_CommandBuffer *commandBuffer, | ||||||
| 		uint32_t firstBinding, | 		uint32_t firstBinding, | ||||||
|  | @ -432,7 +437,7 @@ struct Refresh_Device | ||||||
| 		uint64_t *pOffsets | 		uint64_t *pOffsets | ||||||
| 	); | 	); | ||||||
| 
 | 
 | ||||||
| 	void(*BindIndexBuffer)( | 	void (*BindIndexBuffer)( | ||||||
| 		Refresh_Renderer *driverData, | 		Refresh_Renderer *driverData, | ||||||
| 		Refresh_CommandBuffer *commandBuffer, | 		Refresh_CommandBuffer *commandBuffer, | ||||||
| 		Refresh_Buffer *buffer, | 		Refresh_Buffer *buffer, | ||||||
|  | @ -440,19 +445,19 @@ struct Refresh_Device | ||||||
| 		Refresh_IndexElementSize indexElementSize | 		Refresh_IndexElementSize indexElementSize | ||||||
| 	); | 	); | ||||||
| 
 | 
 | ||||||
| 	void(*BindComputePipeline)( | 	void (*BindComputePipeline)( | ||||||
| 		Refresh_Renderer *driverData, | 		Refresh_Renderer *driverData, | ||||||
| 		Refresh_CommandBuffer *commandBuffer, | 		Refresh_CommandBuffer *commandBuffer, | ||||||
| 		Refresh_ComputePipeline *computePipeline | 		Refresh_ComputePipeline *computePipeline | ||||||
| 	); | 	); | ||||||
| 
 | 
 | ||||||
| 	void(*BindComputeBuffers)( | 	void (*BindComputeBuffers)( | ||||||
| 		Refresh_Renderer *driverData, | 		Refresh_Renderer *driverData, | ||||||
| 		Refresh_CommandBuffer *commandBuffer, | 		Refresh_CommandBuffer *commandBuffer, | ||||||
| 		Refresh_Buffer **pBuffers | 		Refresh_Buffer **pBuffers | ||||||
| 	); | 	); | ||||||
| 
 | 
 | ||||||
| 	void(*BindComputeTextures)( | 	void (*BindComputeTextures)( | ||||||
| 		Refresh_Renderer *driverData, | 		Refresh_Renderer *driverData, | ||||||
| 		Refresh_CommandBuffer *commandBuffer, | 		Refresh_CommandBuffer *commandBuffer, | ||||||
| 		Refresh_Texture **pTextures | 		Refresh_Texture **pTextures | ||||||
|  | @ -464,7 +469,7 @@ struct Refresh_Device | ||||||
| 		Refresh_PresentMode presentMode | 		Refresh_PresentMode presentMode | ||||||
| 	); | 	); | ||||||
| 
 | 
 | ||||||
| 	void(*UnclaimWindow)( | 	void (*UnclaimWindow)( | ||||||
| 		Refresh_Renderer *driverData, | 		Refresh_Renderer *driverData, | ||||||
| 		void *windowHandle | 		void *windowHandle | ||||||
| 	); | 	); | ||||||
|  | @ -492,16 +497,37 @@ struct Refresh_Device | ||||||
| 		Refresh_PresentMode presentMode | 		Refresh_PresentMode presentMode | ||||||
| 	); | 	); | ||||||
| 
 | 
 | ||||||
| 	void(*Submit)( | 	void (*Submit)( | ||||||
| 		Refresh_Renderer *driverData, | 		Refresh_Renderer *driverData, | ||||||
| 		uint32_t commandBufferCount, | 		Refresh_CommandBuffer *commandBuffer | ||||||
| 		Refresh_CommandBuffer **pCommandBuffers |  | ||||||
| 	); | 	); | ||||||
| 
 | 
 | ||||||
| 	void(*Wait)( | 	Refresh_Fence* (*SubmitAndAcquireFence)( | ||||||
|  | 		Refresh_Renderer *driverData, | ||||||
|  | 		Refresh_CommandBuffer *commandBuffer | ||||||
|  | 	); | ||||||
|  | 
 | ||||||
|  | 	void (*Wait)( | ||||||
| 		Refresh_Renderer *driverData | 		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 */ | 	/* Opaque pointer for the Driver */ | ||||||
| 	Refresh_Renderer *driverData; | 	Refresh_Renderer *driverData; | ||||||
| }; | }; | ||||||
|  | @ -555,7 +581,11 @@ struct Refresh_Device | ||||||
| 	ASSIGN_DRIVER_FUNC(GetSwapchainFormat, name) \ | 	ASSIGN_DRIVER_FUNC(GetSwapchainFormat, name) \ | ||||||
| 	ASSIGN_DRIVER_FUNC(SetSwapchainPresentMode, name) \ | 	ASSIGN_DRIVER_FUNC(SetSwapchainPresentMode, name) \ | ||||||
| 	ASSIGN_DRIVER_FUNC(Submit, 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 | typedef struct Refresh_Driver | ||||||
| { | { | ||||||
|  |  | ||||||
|  | @ -268,6 +268,19 @@ static void TEMPLATE_DrawPrimitives( | ||||||
| 	NOT_IMPLEMENTED | 	NOT_IMPLEMENTED | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
|  | static void TEMPLATE_DrawPrimitivesIndirect( | ||||||
|  | 	Refresh_Renderer *driverData, | ||||||
|  | 	Refresh_CommandBuffer *commandBuffer, | ||||||
|  | 	Refresh_Buffer *buffer, | ||||||
|  | 	uint32_t offsetInBytes, | ||||||
|  | 	uint32_t drawCount, | ||||||
|  | 	uint32_t stride, | ||||||
|  | 	uint32_t vertexParamOffset, | ||||||
|  | 	uint32_t fragmentParamOffset | ||||||
|  | ) { | ||||||
|  | 	NOT_IMPLEMENTED | ||||||
|  | } | ||||||
|  | 
 | ||||||
| static void TEMPLATE_DispatchCompute( | static void TEMPLATE_DispatchCompute( | ||||||
| 	Refresh_Renderer *device, | 	Refresh_Renderer *device, | ||||||
| 	Refresh_CommandBuffer *commandBuffer, | 	Refresh_CommandBuffer *commandBuffer, | ||||||
|  | @ -347,8 +360,13 @@ static void TEMPLATE_SetTextureDataYUV( | ||||||
| 	uint32_t yHeight, | 	uint32_t yHeight, | ||||||
| 	uint32_t uvWidth, | 	uint32_t uvWidth, | ||||||
| 	uint32_t uvHeight, | 	uint32_t uvHeight, | ||||||
| 	void* data, | 	void *yDataPtr, | ||||||
| 	uint32_t dataLength | 	void *uDataPtr, | ||||||
|  | 	void *vDataPtr, | ||||||
|  | 	uint32_t yDataLength, | ||||||
|  | 	uint32_t uvDataLength, | ||||||
|  | 	uint32_t yStride, | ||||||
|  | 	uint32_t uvStride | ||||||
| ) { | ) { | ||||||
| 	NOT_IMPLEMENTED | 	NOT_IMPLEMENTED | ||||||
| } | } | ||||||
|  | @ -485,10 +503,15 @@ static void TEMPLATE_QueueDestroyGraphicsPipeline( | ||||||
| 
 | 
 | ||||||
| /* Graphics State */ | /* Graphics State */ | ||||||
| 
 | 
 | ||||||
|  | static Refresh_CommandBuffer* TEMPLATE_AcquireCommandBuffer( | ||||||
|  | 	Refresh_Renderer *driverData | ||||||
|  | ) { | ||||||
|  | 	NOT_IMPLEMENTED | ||||||
|  | } | ||||||
|  | 
 | ||||||
| static void TEMPLATE_BeginRenderPass( | static void TEMPLATE_BeginRenderPass( | ||||||
| 	Refresh_Renderer *driverData, | 	Refresh_Renderer *driverData, | ||||||
| 	Refresh_CommandBuffer *commandBuffer, | 	Refresh_CommandBuffer *commandBuffer, | ||||||
| 	Refresh_Rect *renderArea, |  | ||||||
| 	Refresh_ColorAttachmentInfo *colorAttachmentInfos, | 	Refresh_ColorAttachmentInfo *colorAttachmentInfos, | ||||||
| 	uint32_t colorAttachmentCount, | 	uint32_t colorAttachmentCount, | ||||||
| 	Refresh_DepthStencilAttachmentInfo *depthStencilAttachmentInfo | 	Refresh_DepthStencilAttachmentInfo *depthStencilAttachmentInfo | ||||||
|  | @ -548,6 +571,8 @@ static void TEMPLATE_BindIndexBuffer( | ||||||
| 	NOT_IMPLEMENTED | 	NOT_IMPLEMENTED | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
|  | /* Compute State */ | ||||||
|  | 
 | ||||||
| static void TEMPLATE_BindComputePipeline( | static void TEMPLATE_BindComputePipeline( | ||||||
| 	Refresh_Renderer *driverData, | 	Refresh_Renderer *driverData, | ||||||
| 	Refresh_CommandBuffer *commandBuffer, | 	Refresh_CommandBuffer *commandBuffer, | ||||||
|  | @ -572,14 +597,24 @@ static void TEMPLATE_BindComputeTextures( | ||||||
| 	NOT_IMPLEMENTED | 	NOT_IMPLEMENTED | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| static Refresh_CommandBuffer* TEMPLATE_AcquireCommandBuffer( | /* Window and Swapchain Management */ | ||||||
|  | 
 | ||||||
|  | static uint8_t TEMPLATE_ClaimWindow( | ||||||
| 	Refresh_Renderer *driverData, | 	Refresh_Renderer *driverData, | ||||||
| 	uint8_t fixed | 	void *windowHandle, | ||||||
|  | 	Refresh_PresentMode presentMode | ||||||
| ) { | ) { | ||||||
| 	NOT_IMPLEMENTED | 	NOT_IMPLEMENTED | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| Refresh_Texture* TEMPLATE_AcquireSwapchainTexture( | static void TEMPLATE_UnclaimWindow( | ||||||
|  | 	Refresh_Renderer *driverData, | ||||||
|  | 	void *windowHandle | ||||||
|  | ) { | ||||||
|  | 	NOT_IMPLEMENTED | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | static Refresh_Texture* TEMPLATE_AcquireSwapchainTexture( | ||||||
| 	Refresh_Renderer *driverData, | 	Refresh_Renderer *driverData, | ||||||
| 	Refresh_CommandBuffer *commandBuffer, | 	Refresh_CommandBuffer *commandBuffer, | ||||||
| 	void *windowHandle, | 	void *windowHandle, | ||||||
|  | @ -589,17 +624,33 @@ Refresh_Texture* TEMPLATE_AcquireSwapchainTexture( | ||||||
| 	NOT_IMPLEMENTED | 	NOT_IMPLEMENTED | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| Refresh_TextureFormat TEMPLATE_GetSwapchainFormat( | static Refresh_TextureFormat TEMPLATE_GetSwapchainFormat( | ||||||
| 	Refresh_Renderer *driverData, | 	Refresh_Renderer *driverData, | ||||||
| 	void *windowHandle | 	void *windowHandle | ||||||
| ) { | ) { | ||||||
| 	NOT_IMPLEMENTED | 	NOT_IMPLEMENTED | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
|  | static void TEMPLATE_SetSwapchainPresentMode( | ||||||
|  | 	Refresh_Renderer *driverData, | ||||||
|  | 	void *windowHandle, | ||||||
|  | 	Refresh_PresentMode presentMode | ||||||
|  | ) { | ||||||
|  | 	NOT_IMPLEMENTED | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | /* Submission and Fences */ | ||||||
|  | 
 | ||||||
| static void TEMPLATE_Submit( | static void TEMPLATE_Submit( | ||||||
| 	Refresh_Renderer *driverData, | 	Refresh_Renderer *driverData, | ||||||
| 	uint32_t commandBufferCount, | 	Refresh_CommandBuffer *commandBuffer | ||||||
| 	Refresh_CommandBuffer **pCommandBuffers | ) { | ||||||
|  | 	NOT_IMPLEMENTED | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | static Refresh_Fence* TEMPLATE_SubmitAndAcquireFence( | ||||||
|  | 	Refresh_Renderer *driverData, | ||||||
|  | 	Refresh_CommandBuffer *commandBuffer | ||||||
| ) { | ) { | ||||||
| 	NOT_IMPLEMENTED | 	NOT_IMPLEMENTED | ||||||
| } | } | ||||||
|  | @ -610,8 +661,38 @@ static void TEMPLATE_Wait( | ||||||
| 	NOT_IMPLEMENTED | 	NOT_IMPLEMENTED | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
|  | static void TEMPLATE_WaitForFences( | ||||||
|  | 	Refresh_Renderer *driverData, | ||||||
|  | 	uint8_t waitAll, | ||||||
|  | 	uint32_t fenceCount, | ||||||
|  | 	Refresh_Fence **pFences | ||||||
|  | ) { | ||||||
|  | 	NOT_IMPLEMENTED | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | static int TEMPLATE_QueryFence( | ||||||
|  | 	Refresh_Renderer *driverData, | ||||||
|  | 	Refresh_Fence *fence | ||||||
|  | ) { | ||||||
|  | 	NOT_IMPLEMENTED | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | static void TEMPLATE_ReleaseFence( | ||||||
|  | 	Refresh_Renderer *driverData, | ||||||
|  | 	Refresh_Fence *fence | ||||||
|  | ) { | ||||||
|  | 	NOT_IMPLEMENTED | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | /* Device Creation */ | ||||||
|  | 
 | ||||||
|  | static uint8_t TEMPLATE_PrepareDriver( | ||||||
|  | 	uint32_t *flags | ||||||
|  | ) { | ||||||
|  | 	NOT_IMPLEMENTED | ||||||
|  | } | ||||||
|  | 
 | ||||||
| static Refresh_Device* TEMPLATE_CreateDevice( | static Refresh_Device* TEMPLATE_CreateDevice( | ||||||
| 	Refresh_PresentationParameters *presentationParameters, |  | ||||||
| 	uint8_t debugMode | 	uint8_t debugMode | ||||||
| ) { | ) { | ||||||
| 	NOT_IMPLEMENTED | 	NOT_IMPLEMENTED | ||||||
|  | @ -619,6 +700,7 @@ static Refresh_Device* TEMPLATE_CreateDevice( | ||||||
| 
 | 
 | ||||||
| Refresh_Driver TEMPLATEDriver = { | Refresh_Driver TEMPLATEDriver = { | ||||||
| 	"TEMPLATE", | 	"TEMPLATE", | ||||||
|  | 	TEMPLATE_PrepareDriver, | ||||||
| 	TEMPLATE_CreateDevice | 	TEMPLATE_CreateDevice | ||||||
| }; | }; | ||||||
| 
 | 
 | ||||||
|  |  | ||||||
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							|  | @ -89,6 +89,7 @@ VULKAN_DEVICE_FUNCTION(BaseVK, void, vkCmdClearDepthStencilImage, (VkCommandBuff | ||||||
| VULKAN_DEVICE_FUNCTION(BaseVK, void, vkCmdCopyBuffer, (VkCommandBuffer commandBuffer, VkBuffer srcBuffer, VkBuffer dstBuffer, uint32_t regionCount, const VkBufferCopy* pRegions)) | VULKAN_DEVICE_FUNCTION(BaseVK, void, vkCmdCopyBuffer, (VkCommandBuffer commandBuffer, VkBuffer srcBuffer, VkBuffer dstBuffer, uint32_t regionCount, const VkBufferCopy* pRegions)) | ||||||
| VULKAN_DEVICE_FUNCTION(BaseVK, void, vkCmdCopyBufferToImage, (VkCommandBuffer commandBuffer, VkBuffer srcBuffer, VkImage dstImage, VkImageLayout dstImageLayout, uint32_t regionCount, const VkBufferImageCopy *pRegions)) | VULKAN_DEVICE_FUNCTION(BaseVK, void, vkCmdCopyBufferToImage, (VkCommandBuffer commandBuffer, VkBuffer srcBuffer, VkImage dstImage, VkImageLayout dstImageLayout, uint32_t regionCount, const VkBufferImageCopy *pRegions)) | ||||||
| VULKAN_DEVICE_FUNCTION(BaseVK, void, vkCmdCopyImageToBuffer, (VkCommandBuffer commandBuffer, VkImage srcImage, VkImageLayout srcImageLayout, VkBuffer dstBuffer, uint32_t regionCount, const VkBufferImageCopy *pRegions)) | VULKAN_DEVICE_FUNCTION(BaseVK, void, vkCmdCopyImageToBuffer, (VkCommandBuffer commandBuffer, VkImage srcImage, VkImageLayout srcImageLayout, VkBuffer dstBuffer, uint32_t regionCount, const VkBufferImageCopy *pRegions)) | ||||||
|  | VULKAN_DEVICE_FUNCTION(BaseVK, void, vkCmdCopyImage, (VkCommandBuffer commandBuffer, VkImage srcImage, VkImageLayout srcImageLayout, VkImage dstImage, VkImageLayout dstImageLayout, uint32_t regionCount, const VkImageCopy* pRegions)) | ||||||
| VULKAN_DEVICE_FUNCTION(BaseVK, void, vkCmdDispatch, (VkCommandBuffer commandBuffer, uint32_t groupCountX, uint32_t groupCountY, uint32_t groupCountZ)) | VULKAN_DEVICE_FUNCTION(BaseVK, void, vkCmdDispatch, (VkCommandBuffer commandBuffer, uint32_t groupCountX, uint32_t groupCountY, uint32_t groupCountZ)) | ||||||
| VULKAN_DEVICE_FUNCTION(BaseVK, void, vkCmdDraw, (VkCommandBuffer commandBuffer, uint32_t vertexCount, uint32_t instanceCount, uint32_t firstVertex, uint32_t firstInstance)) | VULKAN_DEVICE_FUNCTION(BaseVK, void, vkCmdDraw, (VkCommandBuffer commandBuffer, uint32_t vertexCount, uint32_t instanceCount, uint32_t firstVertex, uint32_t firstInstance)) | ||||||
| VULKAN_DEVICE_FUNCTION(BaseVK, void, vkCmdDrawIndexed, (VkCommandBuffer commandBuffer, uint32_t indexCount, uint32_t instanceCount, uint32_t firstIndex, int32_t vertexOffset, uint32_t firstInstance)) | VULKAN_DEVICE_FUNCTION(BaseVK, void, vkCmdDrawIndexed, (VkCommandBuffer commandBuffer, uint32_t indexCount, uint32_t instanceCount, uint32_t firstIndex, int32_t vertexOffset, uint32_t firstInstance)) | ||||||
|  |  | ||||||
|  | @ -48,7 +48,6 @@ | ||||||
| #define floorf SDL_floorf | #define floorf SDL_floorf | ||||||
| #define ldexp SDL_scalbn | #define ldexp SDL_scalbn | ||||||
| #define pow SDL_pow | #define pow SDL_pow | ||||||
| #define strtol SDL_strtol |  | ||||||
| 
 | 
 | ||||||
| #ifdef memcmp | #ifdef memcmp | ||||||
| #undef memcmp | #undef memcmp | ||||||
|  | @ -74,13 +73,10 @@ | ||||||
| #undef strlen | #undef strlen | ||||||
| #endif | #endif | ||||||
| #define strlen SDL_strlen | #define strlen SDL_strlen | ||||||
| #ifdef strncmp |  | ||||||
| #undef strncmp |  | ||||||
| #endif |  | ||||||
| #define strncmp SDL_strncmp |  | ||||||
| 
 | 
 | ||||||
| /* These are per the Texture2D.FromStream spec */ | /* These are per the Texture2D.FromStream spec */ | ||||||
| #define STBI_ONLY_PNG | #define STBI_ONLY_PNG | ||||||
|  | #define STBI_ONLY_QOI | ||||||
| 
 | 
 | ||||||
| /* These are per the Texture2D.SaveAs* spec */ | /* These are per the Texture2D.SaveAs* spec */ | ||||||
| #define STBIW_ONLY_PNG | #define STBIW_ONLY_PNG | ||||||
|  | @ -140,6 +136,7 @@ SDL_SIMDRealloc(void *mem, const size_t len) | ||||||
| #endif | #endif | ||||||
| 
 | 
 | ||||||
| #define STB_IMAGE_STATIC | #define STB_IMAGE_STATIC | ||||||
|  | #define STBI_NO_HDR | ||||||
| #define STBI_ASSERT SDL_assert | #define STBI_ASSERT SDL_assert | ||||||
| #define STBI_MALLOC SDL_SIMDAlloc | #define STBI_MALLOC SDL_SIMDAlloc | ||||||
| #define STBI_REALLOC SDL_SIMDRealloc | #define STBI_REALLOC SDL_SIMDRealloc | ||||||
|  | @ -190,51 +187,72 @@ static unsigned char* dgibson_stbi_zlib_compress( | ||||||
| /* Image Read API */ | /* Image Read API */ | ||||||
| 
 | 
 | ||||||
| uint8_t* Refresh_Image_Load( | uint8_t* Refresh_Image_Load( | ||||||
| 	char const *filename, | 	uint8_t *bufferPtr, | ||||||
|  | 	int32_t bufferLength, | ||||||
| 	int32_t *w, | 	int32_t *w, | ||||||
| 	int32_t *h, | 	int32_t *h, | ||||||
| 	int32_t *numChannels | 	int32_t *len | ||||||
| ) { | ) { | ||||||
| 	return stbi_load(filename, w, h, numChannels, STBI_rgb_alpha); | 	uint8_t* result; | ||||||
|  | 	uint8_t* pixels; | ||||||
|  | 	int32_t format; | ||||||
|  | 	int32_t i; | ||||||
|  | 
 | ||||||
|  | 	result = stbi_load_from_memory( | ||||||
|  | 		bufferPtr, | ||||||
|  | 		bufferLength, | ||||||
|  | 		w, | ||||||
|  | 		h, | ||||||
|  | 		&format, | ||||||
|  | 		STBI_rgb_alpha | ||||||
|  | 	); | ||||||
|  | 
 | ||||||
|  | 	if (result == NULL) | ||||||
|  | 	{ | ||||||
|  | 		SDL_LogWarn(SDL_LOG_CATEGORY_ERROR, "Image loading failed: %s", stbi_failure_reason()); | ||||||
|  | 	} | ||||||
|  | 
 | ||||||
|  | 	/* Ensure that the alpha pixels are... well, actual alpha.
 | ||||||
|  | 	 * You think this looks stupid, but be assured: Your paint program is | ||||||
|  | 	 * almost certainly even stupider. | ||||||
|  | 	 * -flibit | ||||||
|  | 	 */ | ||||||
|  | 	pixels = result; | ||||||
|  | 	*len = (*w) * (*h) *4; | ||||||
|  | 	for (i = 0; i < *len; i += 4, pixels += 4) | ||||||
|  | 	{ | ||||||
|  | 		if (pixels[3] == 0) | ||||||
|  | 		{ | ||||||
|  | 			pixels[0] = 0; | ||||||
|  | 			pixels[1] = 1; | ||||||
|  | 			pixels[2] = 2; | ||||||
|  | 		} | ||||||
|  | 	} | ||||||
|  | 
 | ||||||
|  | 	return result; | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| void Refresh_Image_Free(uint8_t *mem) | void Refresh_Image_Free(uint8_t *mem) | ||||||
| { | { | ||||||
| 	stbi_image_free(mem); | 	SDL_SIMDFree(mem); | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| /* Image Write API */ | /* Image Write API */ | ||||||
| 
 | 
 | ||||||
| void Refresh_Image_SavePNG( | void Refresh_Image_SavePNG( | ||||||
| 	const char *filename, | 	const char* filename, | ||||||
|  | 	uint8_t* data, | ||||||
| 	int32_t w, | 	int32_t w, | ||||||
| 	int32_t h, | 	int32_t h | ||||||
| 	uint8_t bgra, |  | ||||||
| 	uint8_t *data |  | ||||||
| ) { | ) { | ||||||
| 	uint32_t i; | 	stbi_write_png( | ||||||
| 	uint8_t *bgraData; | 		filename, | ||||||
| 
 | 		w, | ||||||
| 	if (bgra) | 		h, | ||||||
| 	{ | 		4, | ||||||
| 		bgraData = SDL_malloc(w * h * 4); | 		data, | ||||||
| 
 | 		w * 4 | ||||||
| 		for (i = 0; i < w * h * 4; i += 4) | 	); | ||||||
| 		{ |  | ||||||
| 			bgraData[i]     = data[i + 2]; |  | ||||||
| 			bgraData[i + 1] = data[i + 1]; |  | ||||||
| 			bgraData[i + 2] = data[i]; |  | ||||||
| 			bgraData[i + 3] = data[i + 3]; |  | ||||||
| 		} |  | ||||||
| 
 |  | ||||||
| 		stbi_write_png(filename, w, h, 4, bgraData, w * 4); |  | ||||||
| 
 |  | ||||||
| 		SDL_free(bgraData); |  | ||||||
| 	} |  | ||||||
| 	else |  | ||||||
| 	{ |  | ||||||
| 		stbi_write_png(filename, w, h, 4, data, w * 4); |  | ||||||
| 	} |  | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| /* vim: set noexpandtab shiftwidth=8 tabstop=8: */ | /* vim: set noexpandtab shiftwidth=8 tabstop=8: */ | ||||||
|  |  | ||||||
							
								
								
									
										598
									
								
								src/stb_image.h
								
								
								
								
							
							
						
						
									
										598
									
								
								src/stb_image.h
								
								
								
								
							
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							
		Loading…
	
		Reference in New Issue