@@ -410,7 +410,7 @@ MOJOSHADER_sdlProgram *MOJOSHADER_sdlLinkProgram(
410
410
411
411
if (v_transpiled_source == NULL )
412
412
{
413
- set_error ("Failed to transpile vertex shader from SPIR-V!" );
413
+ set_error (SHD_GetError () );
414
414
return NULL ;
415
415
}
416
416
@@ -423,7 +423,7 @@ MOJOSHADER_sdlProgram *MOJOSHADER_sdlLinkProgram(
423
423
424
424
if (p_transpiled_source == NULL )
425
425
{
426
- set_error ("Failed to transpile pixel shader from SPIR-V!" );
426
+ set_error (SHD_GetError () );
427
427
ctx -> free_fn ((char * ) v_transpiled_source , ctx -> malloc_data );
428
428
return NULL ;
429
429
}
@@ -627,28 +627,7 @@ void MOJOSHADER_sdlDeleteShader(
627
627
uint8_t MOJOSHADER_sdlCheckProgramStatus (
628
628
MOJOSHADER_sdlContext * ctx
629
629
) {
630
- MOJOSHADER_sdlShader * vshader = ctx -> vertex_shader ;
631
- MOJOSHADER_sdlShader * pshader = ctx -> pixel_shader ;
632
-
633
- if (ctx -> linker_cache == NULL )
634
- {
635
- ctx -> linker_cache = hash_create (NULL , hash_shaders , match_shaders ,
636
- nuke_shaders , 0 , ctx -> malloc_fn ,
637
- ctx -> free_fn , ctx -> malloc_data );
638
-
639
- if (ctx -> linker_cache == NULL )
640
- {
641
- out_of_memory ();
642
- return 0 ;
643
- }
644
- }
645
-
646
- BoundShaders shaders ;
647
- shaders .vertex = vshader ;
648
- shaders .fragment = pshader ;
649
-
650
- const void * val = NULL ;
651
- return hash_find (ctx -> linker_cache , & shaders , & val );
630
+ return ctx -> bound_program != NULL ;
652
631
}
653
632
654
633
void MOJOSHADER_sdlShaderAddRef (MOJOSHADER_sdlShader * shader )
@@ -1123,8 +1102,8 @@ typedef struct SDLGPU_Renderer
1123
1102
int32_t currentVertexBufferBindingsIndex ;
1124
1103
1125
1104
SDL_GpuGraphicsPipeline * currentGraphicsPipeline ;
1126
- SDL_GpuShaderModule * currentVertexShader ;
1127
- SDL_GpuShaderModule * currentFragmentShader ;
1105
+ MOJOSHADER_sdlShader * currentVertexShader ;
1106
+ MOJOSHADER_sdlShader * currentFragmentShader ;
1128
1107
1129
1108
PackedVertexBufferBindingsArray vertexBufferBindingsCache ;
1130
1109
@@ -1221,6 +1200,8 @@ static void SDLGPU_DestroyDevice(FNA3D_Device *device)
1221
1200
static void SDLGPU_ResetCommandBufferState (
1222
1201
SDLGPU_Renderer * renderer
1223
1202
) {
1203
+ renderer -> commandBuffer = SDL_GpuAcquireCommandBuffer (renderer -> device );
1204
+
1224
1205
/* Reset state */
1225
1206
renderer -> needNewRenderPass = 1 ;
1226
1207
renderer -> needNewGraphicsPipeline = 1 ;
@@ -2023,18 +2004,18 @@ static void SDLGPU_INTERNAL_BindGraphicsPipeline(
2023
2004
SDLGPU_Renderer * renderer
2024
2005
) {
2025
2006
SDL_GpuGraphicsPipeline * pipeline ;
2026
- SDL_GpuShaderModule * vertShaderModule , * fragShaderModule ;
2007
+ MOJOSHADER_sdlShader * vertShader , * fragShader ;
2027
2008
2028
- MOJOSHADER_sdlGetShaderModules (
2009
+ MOJOSHADER_sdlGetBoundShaders (
2029
2010
renderer -> mojoshaderContext ,
2030
- & vertShaderModule ,
2031
- & fragShaderModule
2011
+ & vertShader ,
2012
+ & fragShader
2032
2013
);
2033
2014
2034
2015
if (
2035
2016
!renderer -> needNewGraphicsPipeline &&
2036
- renderer -> currentVertexShader == vertShaderModule &&
2037
- renderer -> currentFragmentShader == fragShaderModule
2017
+ renderer -> currentVertexShader == vertShader &&
2018
+ renderer -> currentFragmentShader == fragShader
2038
2019
) {
2039
2020
return ;
2040
2021
}
@@ -2052,8 +2033,8 @@ static void SDLGPU_INTERNAL_BindGraphicsPipeline(
2052
2033
renderer -> currentGraphicsPipeline = pipeline ;
2053
2034
}
2054
2035
2055
- renderer -> currentVertexShader = vertShaderModule ;
2056
- renderer -> currentFragmentShader = fragShaderModule ;
2036
+ renderer -> currentVertexShader = vertShader ;
2037
+ renderer -> currentFragmentShader = fragShader ;
2057
2038
2058
2039
/* Reset deferred binding state */
2059
2040
renderer -> needNewGraphicsPipeline = 0 ;
@@ -2219,7 +2200,11 @@ static void SDLGPU_ApplyVertexBufferBindings(
2219
2200
/* link/compile shader program if it hasn't been yet */
2220
2201
if (!MOJOSHADER_sdlCheckProgramStatus (renderer -> mojoshaderContext ))
2221
2202
{
2222
- MOJOSHADER_sdlLinkProgram (renderer -> mojoshaderContext );
2203
+ if (!MOJOSHADER_sdlLinkProgram (renderer -> mojoshaderContext ))
2204
+ {
2205
+ FNA3D_LogError (MOJOSHADER_sdlGetError (renderer -> mojoshaderContext ));
2206
+ return ;
2207
+ }
2223
2208
}
2224
2209
2225
2210
/* Check VertexBufferBindings */
@@ -3030,7 +3015,6 @@ static void SDLGPU_INTERNAL_SetTextureData(
3030
3015
void * data ,
3031
3016
uint32_t dataLength
3032
3017
) {
3033
- SDLGPU_TextureHandle * textureHandle = (SDLGPU_TextureHandle * ) texture ;
3034
3018
SDL_GpuBufferCopy copyParams ;
3035
3019
SDL_GpuTextureRegion textureRegion ;
3036
3020
SDL_GpuBufferImageCopy textureCopyParams ;
@@ -3064,7 +3048,7 @@ static void SDLGPU_INTERNAL_SetTextureData(
3064
3048
renderer -> textureUploadBufferOffset == 0 ? SDL_GPU_TRANSFEROPTIONS_CYCLE : SDL_GPU_TRANSFEROPTIONS_UNSAFE
3065
3049
);
3066
3050
3067
- textureRegion .textureSlice .texture = textureHandle -> texture ;
3051
+ textureRegion .textureSlice .texture = texture ;
3068
3052
textureRegion .textureSlice .layer = layer ;
3069
3053
textureRegion .textureSlice .mipLevel = mipLevel ;
3070
3054
textureRegion .x = x ;
@@ -3925,7 +3909,7 @@ static FNA3D_Texture* SDLGPU_CreateSysTexture(
3925
3909
3926
3910
static uint8_t SDLGPU_PrepareWindowAttributes (uint32_t * flags )
3927
3911
{
3928
- SDL_GpuBackend selectedBackend =
3912
+ selectedBackend =
3929
3913
SDL_GpuSelectBackend (
3930
3914
preferredBackends ,
3931
3915
2 ,
@@ -3948,6 +3932,7 @@ static FNA3D_Device* SDLGPU_CreateDevice(
3948
3932
SDLGPU_Renderer * renderer ;
3949
3933
SDL_GpuDevice * device ;
3950
3934
FNA3D_Device * result ;
3935
+ int32_t i ;
3951
3936
3952
3937
requestedPresentationParameters = * presentationParameters ;
3953
3938
device = SDL_GpuCreateDevice (debugMode );
@@ -4011,6 +3996,18 @@ static FNA3D_Device* SDLGPU_CreateDevice(
4011
3996
renderer -> bufferUploadBufferSize
4012
3997
);
4013
3998
3999
+ /*
4000
+ * Initialize renderer members not covered by SDL_memset('\0')
4001
+ */
4002
+
4003
+ renderer -> multisampleMask = 0xFFFFFFFF ;
4004
+
4005
+ for (i = 0 ; i < MAX_BOUND_VERTEX_BUFFERS ; i += 1 )
4006
+ {
4007
+ renderer -> vertexBindings [i ].vertexDeclaration .elements =
4008
+ renderer -> vertexElements [i ];
4009
+ }
4010
+
4014
4011
renderer -> mojoshaderContext = MOJOSHADER_sdlCreateContext (
4015
4012
device ,
4016
4013
selectedBackend ,
0 commit comments