update API to allow batchable shader params
parent
da9b255dec
commit
2548833525
|
@ -650,6 +650,8 @@ REFRESHAPI void REFRESH_Clear(
|
|||
* instanceCount: The number of instances that will be drawn.
|
||||
* indices: The index buffer to bind for this draw call.
|
||||
* indexElementSize: The size of the index type for this index buffer.
|
||||
* vertexParamOffset: The offset of the vertex shader param data.
|
||||
* fragmentParamOffset: The offset of the fragment shader param data.
|
||||
*/
|
||||
REFRESHAPI void REFRESH_DrawInstancedPrimitives(
|
||||
REFRESH_Device *device,
|
||||
|
@ -660,7 +662,9 @@ REFRESHAPI void REFRESH_DrawInstancedPrimitives(
|
|||
uint32_t primitiveCount,
|
||||
uint32_t instanceCount,
|
||||
REFRESH_Buffer *indices,
|
||||
REFRESH_IndexElementSize indexElementSize
|
||||
REFRESH_IndexElementSize indexElementSize,
|
||||
uint32_t vertexParamOffset,
|
||||
uint32_t fragmentParamOffset
|
||||
);
|
||||
|
||||
/* Draws data from vertex/index buffers.
|
||||
|
@ -672,6 +676,8 @@ REFRESHAPI void REFRESH_DrawInstancedPrimitives(
|
|||
* primitiveCount: The number of primitives to draw.
|
||||
* indices: The index buffer to bind for this draw call.
|
||||
* indexElementSize: The size of the index type for this index buffer.
|
||||
* vertexParamOffset: The offset of the vertex shader param data.
|
||||
* fragmentParamOffset: The offset of the fragment shader param data.
|
||||
*/
|
||||
REFRESHAPI void REFRESH_DrawIndexedPrimitives(
|
||||
REFRESH_Device *device,
|
||||
|
@ -681,18 +687,24 @@ REFRESHAPI void REFRESH_DrawIndexedPrimitives(
|
|||
uint32_t startIndex,
|
||||
uint32_t primitiveCount,
|
||||
REFRESH_Buffer *indices,
|
||||
REFRESH_IndexElementSize indexElementSize
|
||||
REFRESH_IndexElementSize indexElementSize,
|
||||
uint32_t vertexParamOffset,
|
||||
uint32_t fragmentParamOffset
|
||||
);
|
||||
|
||||
/* Draws data from vertex buffers.
|
||||
*
|
||||
* vertexStart: The starting offset to read from the vertex buffer.
|
||||
* primitiveCount: The number of primitives to draw.
|
||||
* vertexStart: The starting offset to read from the vertex buffer.
|
||||
* primitiveCount: The number of primitives to draw.
|
||||
* vertexParamOffset: The offset of the vertex shader param data.
|
||||
* fragmentParamOffset: The offset of the fragment shader param data.
|
||||
*/
|
||||
REFRESHAPI void REFRESH_DrawPrimitives(
|
||||
REFRESH_Device *device,
|
||||
uint32_t vertexStart,
|
||||
uint32_t primitiveCount
|
||||
uint32_t primitiveCount,
|
||||
uint32_t vertexParamOffset,
|
||||
uint32_t fragmentParamOffset
|
||||
);
|
||||
|
||||
/* State Creation */
|
||||
|
@ -734,7 +746,7 @@ REFRESHAPI REFRESH_ShaderModule* REFRESH_CreateShaderModule(
|
|||
* height: The height of the texture image.
|
||||
* levelCount: The number of mipmap levels to allocate.
|
||||
* usageFlags: Specifies how the texture will be used.
|
||||
*
|
||||
*
|
||||
* Returns an allocated REFRESH_Texture* object. Note that the contents of
|
||||
* the texture are undefined until SetData is called.
|
||||
*/
|
||||
|
@ -775,7 +787,7 @@ REFRESHAPI REFRESH_Texture* REFRESH_CreateTexture3D(
|
|||
* size: The length of the cube side.
|
||||
* levelCount: The number of mipmap levels to allocate.
|
||||
* usageFlags: Specifies how the texture will be used.
|
||||
*
|
||||
*
|
||||
* Returns an allocated REFRESH_Texture* object. Note that the contents of
|
||||
* the texture are undefined until SetData is called.
|
||||
*/
|
||||
|
@ -973,31 +985,33 @@ REFRESHAPI void REFRESH_SetIndexBufferData(
|
|||
uint32_t dataLength
|
||||
);
|
||||
|
||||
/* Pushes vertex shader params for subsequent draw calls.
|
||||
/* Pushes vertex shader params to the device.
|
||||
* Returns a starting offset value to be used with draw calls.
|
||||
*
|
||||
* NOTE:
|
||||
* A pipeline must be bound.
|
||||
* Will use the block size of the currently bound vertex shader.
|
||||
*
|
||||
* data: The client data to write into the buffer.
|
||||
* elementCount: The number of elements from the client buffer to write.
|
||||
* paramBlockCount: The number of param-sized blocks from the client buffer to write.
|
||||
*/
|
||||
REFRESHAPI void REFRESH_PushVertexShaderParams(
|
||||
REFRESHAPI uint32_t REFRESH_PushVertexShaderParams(
|
||||
REFRESH_Device *device,
|
||||
void *data,
|
||||
uint32_t elementCount
|
||||
uint32_t paramBlockCount
|
||||
);
|
||||
|
||||
/* Pushes fragment shader params for subsequent draw calls.
|
||||
/* Pushes fragment shader params to the device.
|
||||
* Returns a starting offset value to be used with draw calls.
|
||||
*
|
||||
* NOTE:
|
||||
* A pipeline must be bound.
|
||||
* Will use the block size of the currently bound fragment shader.
|
||||
*
|
||||
* data: The client data to write into the buffer.
|
||||
* elementCount: The number of elements from the client buffer to write.
|
||||
* paramBlockCount: The number of param-sized blocks from the client buffer to write.
|
||||
*/
|
||||
REFRESHAPI void REFRESH_PushFragmentShaderParams(
|
||||
REFRESHAPI uint32_t REFRESH_PushFragmentShaderParams(
|
||||
REFRESH_Device *device,
|
||||
void *data,
|
||||
uint32_t elementCount
|
||||
|
|
|
@ -167,7 +167,9 @@ void REFRESH_DrawIndexedPrimitives(
|
|||
uint32_t startIndex,
|
||||
uint32_t primitiveCount,
|
||||
REFRESH_Buffer *indices,
|
||||
REFRESH_IndexElementSize indexElementSize
|
||||
REFRESH_IndexElementSize indexElementSize,
|
||||
uint32_t vertexParamOffset,
|
||||
uint32_t fragmentParamOffset
|
||||
) {
|
||||
NULL_RETURN(device);
|
||||
device->DrawIndexedPrimitives(
|
||||
|
@ -178,7 +180,9 @@ void REFRESH_DrawIndexedPrimitives(
|
|||
startIndex,
|
||||
primitiveCount,
|
||||
indices,
|
||||
indexElementSize
|
||||
indexElementSize,
|
||||
vertexParamOffset,
|
||||
fragmentParamOffset
|
||||
);
|
||||
}
|
||||
|
||||
|
@ -191,7 +195,9 @@ void REFRESH_DrawInstancedPrimitives(
|
|||
uint32_t primitiveCount,
|
||||
uint32_t instanceCount,
|
||||
REFRESH_Buffer *indices,
|
||||
REFRESH_IndexElementSize indexElementSize
|
||||
REFRESH_IndexElementSize indexElementSize,
|
||||
uint32_t vertexParamOffset,
|
||||
uint32_t fragmentParamOffset
|
||||
) {
|
||||
NULL_RETURN(device);
|
||||
device->DrawInstancedPrimitives(
|
||||
|
@ -203,20 +209,26 @@ void REFRESH_DrawInstancedPrimitives(
|
|||
primitiveCount,
|
||||
instanceCount,
|
||||
indices,
|
||||
indexElementSize
|
||||
indexElementSize,
|
||||
vertexParamOffset,
|
||||
fragmentParamOffset
|
||||
);
|
||||
}
|
||||
|
||||
void REFRESH_DrawPrimitives(
|
||||
REFRESH_Device *device,
|
||||
uint32_t vertexStart,
|
||||
uint32_t primitiveCount
|
||||
uint32_t primitiveCount,
|
||||
uint32_t vertexParamOffset,
|
||||
uint32_t fragmentParamOffset
|
||||
) {
|
||||
NULL_RETURN(device);
|
||||
device->DrawPrimitives(
|
||||
device->driverData,
|
||||
vertexStart,
|
||||
primitiveCount
|
||||
primitiveCount,
|
||||
vertexParamOffset,
|
||||
fragmentParamOffset
|
||||
);
|
||||
}
|
||||
|
||||
|
@ -526,26 +538,26 @@ void REFRESH_SetIndexBufferData(
|
|||
);
|
||||
}
|
||||
|
||||
void REFRESH_PushVertexShaderParams(
|
||||
uint32_t REFRESH_PushVertexShaderParams(
|
||||
REFRESH_Device *device,
|
||||
void *data,
|
||||
uint32_t elementCount
|
||||
) {
|
||||
NULL_RETURN(device);
|
||||
device->PushVertexShaderParams(
|
||||
if (device == NULL) { return 0; }
|
||||
return device->PushVertexShaderParams(
|
||||
device->driverData,
|
||||
data,
|
||||
elementCount
|
||||
);
|
||||
}
|
||||
|
||||
void REFRESH_PushFragmentShaderParams(
|
||||
uint32_t REFRESH_PushFragmentShaderParams(
|
||||
REFRESH_Device *device,
|
||||
void *data,
|
||||
uint32_t elementCount
|
||||
) {
|
||||
NULL_RETURN(device);
|
||||
device->PushFragmentShaderParams(
|
||||
if (device == NULL) { return 0; }
|
||||
return device->PushFragmentShaderParams(
|
||||
device->driverData,
|
||||
data,
|
||||
elementCount
|
||||
|
|
|
@ -186,7 +186,9 @@ struct REFRESH_Device
|
|||
uint32_t primitiveCount,
|
||||
uint32_t instanceCount,
|
||||
REFRESH_Buffer *indices,
|
||||
REFRESH_IndexElementSize indexElementSize
|
||||
REFRESH_IndexElementSize indexElementSize,
|
||||
uint32_t vertexParamOffset,
|
||||
uint32_t fragmentParamOffset
|
||||
);
|
||||
|
||||
void (*DrawIndexedPrimitives)(
|
||||
|
@ -197,13 +199,17 @@ struct REFRESH_Device
|
|||
uint32_t startIndex,
|
||||
uint32_t primitiveCount,
|
||||
REFRESH_Buffer *indices,
|
||||
REFRESH_IndexElementSize indexElementSize
|
||||
REFRESH_IndexElementSize indexElementSize,
|
||||
uint32_t vertexParamOffset,
|
||||
uint32_t fragmentParamOffset
|
||||
);
|
||||
|
||||
void (*DrawPrimitives)(
|
||||
REFRESH_Renderer *driverData,
|
||||
uint32_t vertexStart,
|
||||
uint32_t primitiveCount
|
||||
uint32_t primitiveCount,
|
||||
uint32_t vertexParamOffset,
|
||||
uint32_t fragmentParamOffset
|
||||
);
|
||||
|
||||
/* State Creation */
|
||||
|
@ -354,13 +360,13 @@ struct REFRESH_Device
|
|||
uint32_t dataLength
|
||||
);
|
||||
|
||||
void(*PushVertexShaderParams)(
|
||||
uint32_t(*PushVertexShaderParams)(
|
||||
REFRESH_Renderer *driverData,
|
||||
void *data,
|
||||
uint32_t elementCount
|
||||
);
|
||||
|
||||
void(*PushFragmentShaderParams)(
|
||||
uint32_t(*PushFragmentShaderParams)(
|
||||
REFRESH_Renderer *driverData,
|
||||
void *data,
|
||||
uint32_t elementCount
|
||||
|
|
|
@ -3192,7 +3192,9 @@ static void VULKAN_DrawInstancedPrimitives(
|
|||
uint32_t primitiveCount,
|
||||
uint32_t instanceCount,
|
||||
REFRESH_Buffer *indices,
|
||||
REFRESH_IndexElementSize indexElementSize
|
||||
REFRESH_IndexElementSize indexElementSize,
|
||||
uint32_t vertexParamOffset,
|
||||
uint32_t fragmentParamOffset
|
||||
) {
|
||||
VulkanRenderer *renderer = (VulkanRenderer*) driverData;
|
||||
VkDescriptorSet descriptorSets[4];
|
||||
|
@ -3203,8 +3205,8 @@ static void VULKAN_DrawInstancedPrimitives(
|
|||
descriptorSets[2] = renderer->currentGraphicsPipeline->vertexUBODescriptorSet;
|
||||
descriptorSets[3] = renderer->currentGraphicsPipeline->fragmentUBODescriptorSet;
|
||||
|
||||
dynamicOffsets[0] = renderer->vertexUBOOffset;
|
||||
dynamicOffsets[1] = renderer->fragmentUBOOffset;
|
||||
dynamicOffsets[0] = vertexParamOffset;
|
||||
dynamicOffsets[1] = fragmentParamOffset;
|
||||
|
||||
RECORD_CMD(renderer->vkCmdBindDescriptorSets(
|
||||
renderer->currentCommandBuffer,
|
||||
|
@ -3238,7 +3240,9 @@ static void VULKAN_DrawIndexedPrimitives(
|
|||
uint32_t startIndex,
|
||||
uint32_t primitiveCount,
|
||||
REFRESH_Buffer *indices,
|
||||
REFRESH_IndexElementSize indexElementSize
|
||||
REFRESH_IndexElementSize indexElementSize,
|
||||
uint32_t vertexParamOffset,
|
||||
uint32_t fragmentParamOffset
|
||||
) {
|
||||
VULKAN_DrawInstancedPrimitives(
|
||||
driverData,
|
||||
|
@ -3249,14 +3253,18 @@ static void VULKAN_DrawIndexedPrimitives(
|
|||
primitiveCount,
|
||||
1,
|
||||
indices,
|
||||
indexElementSize
|
||||
indexElementSize,
|
||||
vertexParamOffset,
|
||||
fragmentParamOffset
|
||||
);
|
||||
}
|
||||
|
||||
static void VULKAN_DrawPrimitives(
|
||||
REFRESH_Renderer *driverData,
|
||||
uint32_t vertexStart,
|
||||
uint32_t primitiveCount
|
||||
uint32_t primitiveCount,
|
||||
uint32_t vertexUniformBufferOffset,
|
||||
uint32_t fragmentUniformBufferOffset
|
||||
) {
|
||||
VulkanRenderer *renderer = (VulkanRenderer*) driverData;
|
||||
VkDescriptorSet descriptorSets[4];
|
||||
|
@ -3267,8 +3275,8 @@ static void VULKAN_DrawPrimitives(
|
|||
descriptorSets[2] = renderer->currentGraphicsPipeline->vertexUBODescriptorSet;
|
||||
descriptorSets[3] = renderer->currentGraphicsPipeline->fragmentUBODescriptorSet;
|
||||
|
||||
dynamicOffsets[0] = renderer->vertexUBOOffset;
|
||||
dynamicOffsets[1] = renderer->fragmentUBOOffset;
|
||||
dynamicOffsets[0] = vertexUniformBufferOffset;
|
||||
dynamicOffsets[1] = fragmentUniformBufferOffset;
|
||||
|
||||
RECORD_CMD(renderer->vkCmdBindDescriptorSets(
|
||||
renderer->currentCommandBuffer,
|
||||
|
@ -5663,7 +5671,7 @@ static void VULKAN_SetIndexBufferData(
|
|||
);
|
||||
}
|
||||
|
||||
static void VULKAN_PushVertexShaderParams(
|
||||
static uint32_t VULKAN_PushVertexShaderParams(
|
||||
REFRESH_Renderer *driverData,
|
||||
void *data,
|
||||
uint32_t elementCount
|
||||
|
@ -5679,7 +5687,7 @@ static void VULKAN_PushVertexShaderParams(
|
|||
UBO_BUFFER_SIZE * (renderer->frameIndex + 1)
|
||||
) {
|
||||
REFRESH_LogError("Vertex UBO overflow!");
|
||||
return;
|
||||
return 0;
|
||||
}
|
||||
|
||||
VULKAN_INTERNAL_SetBufferData(
|
||||
|
@ -5689,9 +5697,11 @@ static void VULKAN_PushVertexShaderParams(
|
|||
data,
|
||||
elementCount * renderer->currentGraphicsPipeline->vertexUBOBlockSize
|
||||
);
|
||||
|
||||
return renderer->vertexUBOOffset;
|
||||
}
|
||||
|
||||
static void VULKAN_PushFragmentShaderParams(
|
||||
static uint32_t VULKAN_PushFragmentShaderParams(
|
||||
REFRESH_Renderer *driverData,
|
||||
void *data,
|
||||
uint32_t elementCount
|
||||
|
@ -5707,7 +5717,7 @@ static void VULKAN_PushFragmentShaderParams(
|
|||
UBO_BUFFER_SIZE * (renderer->frameIndex + 1)
|
||||
) {
|
||||
REFRESH_LogError("Fragment UBO overflow!");
|
||||
return;
|
||||
return 0;
|
||||
}
|
||||
|
||||
VULKAN_INTERNAL_SetBufferData(
|
||||
|
@ -5717,6 +5727,8 @@ static void VULKAN_PushFragmentShaderParams(
|
|||
data,
|
||||
elementCount * renderer->currentGraphicsPipeline->fragmentUBOBlockSize
|
||||
);
|
||||
|
||||
return renderer->fragmentUBOOffset;
|
||||
}
|
||||
|
||||
static inline uint8_t SamplerDescriptorSetDataEqual(
|
||||
|
|
Loading…
Reference in New Issue